Office関連

外部からOutlookのマクロを実行するマクロ

外部からOutlookのマクロを実行するマクロ

今回は外部からOutlookのマクロを実行するマクロを紹介します。
Ol 2000: VBScript から VBA プロシージャを呼び出す」に記載されている方法もあるのですが、2010の場合は上手く動作しなかったので別の方法を考えてみました。

Option Explicit

Public Sub Sample()
  'RunOutlookMacro "SampleModProc" '標準モジュール
  RunOutlookMacro "Project1.ThisOutlookSession.SampleTosProc" 'ThisOutlookSession
End Sub

Public Sub RunOutlookMacro(ByVal MacroName As String)
  If CreateObject("WbemScripting.SWbemLocator").ConnectServer.ExecQuery _
     ("Select * From Win32_Process Where Name = 'OUTLOOK.EXE'").Count < 1 Then
    Shell "OUTLOOK.EXE"
  End If
  With CreateObject("Outlook.Application")
    With .ActiveExplorer.CommandBars("Standard").Controls.Add(Type:=1, Temporary:=True)
      .OnAction = MacroName
      .Execute
      .Delete
    End With
    .Quit
  End With
End Sub

上記コードは”Standard“ツールバーに一時的(Temporary:=True)に指定したマクロを呼び出すコントロールを追加して、外部からそのコントロールを実行(Execute)する仕組みを取っています。
そのため、Outlookのセキュリティ設定でマクロが有効になっていることが前提になってしまいますが、使い勝手はそれなりに良いだろうと思います。
(“外部からOutlookのマクロを実行する”需要があるのかどうかは別にして…)

2012/07/13 追記:
autorunスイッチがあることを知ったので、このスイッチを使ったコードも考えてみました。

Option Explicit

Public Sub Sample()
  'RunOutlookMacro "SampleModProc" '標準モジュール
  RunOutlookMacro "Project1.ThisOutlookSession.SampleTosProc" 'ThisOutlookSession
End Sub

Public Sub RunOutlookMacro(ByVal MacroName As String)
  Shell "OUTLOOK.EXE /autorun """ & MacroName & """"
End Sub

2014/01/22 追記:

■ 引数付きでマクロを実行する場合

通常は「OnActionで実行するプロシージャに引数を渡す」にあるような方法でOnActionプロパティで引数を設定できるのですが、Outlookの場合は何故か上手く行きませんでした。

外部からOutlookのマクロを引数付きで呼び出す場合は、下記のようにActionControlプロパティからCommandBarControlオブジェクトを取得し、Parameterプロパティを利用して引数を渡すのが良いだろうと思います。

・Outlook側

Option Explicit

Public Sub SampleModProc()
  Dim msg As String
  
  msg = ActiveExplorer.CommandBars.ActionControl.Parameter
  MsgBox msg, vbSystemModal
End Sub

・呼び出し側

Option Explicit

Public Sub Sample()
  RunOutlookMacro "SampleModProc", "Hello!!"
End Sub

Public Sub RunOutlookMacro(ByVal MacroName As String, Optional ByVal Arg As String = "")
  If CreateObject("WbemScripting.SWbemLocator").ConnectServer.ExecQuery _
     ("Select * From Win32_Process Where Name = 'OUTLOOK.EXE'").Count < 1 Then
    Shell "OUTLOOK.EXE"
  End If
  With CreateObject("Outlook.Application")
    With .ActiveExplorer.CommandBars("Standard").Controls.Add(Type:=1, Temporary:=True)
      .OnAction = MacroName
      If Len(Trim(Arg)) > 0 Then .Parameter = Arg
      .Execute
      .Delete
    End With
    .Quit
  End With
End Sub

■ 関連Webページ

・Ol 2000: VBScript から VBA プロシージャを呼び出す
http://support.microsoft.com/kb/221827/ja
・別のプログラムから Outlook を自動化する方法
http://support.microsoft.com/kb/201096/ja
・Office Space: Microsoft Outlook が既に実行中であるかどうかに関係なくスクリプトを起動する
http://gallery.technet.microsoft.com/office/cd88e4e2-e45f-4d43-b19e-9ace3486b295

Faviconをダウンロードするマクロ前のページ

Office 2013 Consumer Preview(カスタマー プレビュー)をインストールしてみました。次のページ

関連記事

  1. Office関連

    マクロに割り当てたショートカットキーをCSVファイルとして出力するWordマクロ

    Word MVPの新田さんが書かれた以下の記事を見て思いついたマクロで…

  2. Office関連

    ファイルをブックに埋め込むExcelマクロ

    大分前に書いた回答用のコードが出てきたので、記事として残しておきます。…

  3. Office関連

    「最速攻略 Wordマクロ/VBA徹底入門」レビュー

    いつもお世話になっているExcel MVPの伊藤さんに9月20日発売予…

  4. アイコン一覧

    Office 365アイコン(imageMso)一覧(J)

    Office 365のデスクトップ版Officeアプリケーション(Wo…

  5. Office アドイン

    [Office用アプリ]法人登録する際の参考資料

    法人としてMicrosoft Seller DashboardでOff…

  6. Office関連

    UIAutomationClient参照時にDLL読み込みエラーが発生した時の対処法

    マクロでダイアログやボタンの操作を行う時に便利なUI Automati…

コメント

    • mm
    • 2014年 1月 21日 5:47pm

    外部からOutlook 2010のマクロを「引数付きで」呼び出すことはできないでしょうか?
    どうしてもExcelもしくはVBSから呼び出す必要があり、困っています。

  1. > mm様

    記事に追記しましたが、外部からOutlookのマクロを引数付きで呼び出す場合は、CommandBarControlオブジェクトのParameterプロパティを使うのが良いだろうと思います。

  1. この記事へのトラックバックはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP