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

関連記事

  1. Office関連

    [VBA]自動的にフォントサイズを調整する疑似テキストボックス

    前回と同様、環境依存つながりでmougの給湯室に書いたコードを載せてお…

  2. Office関連

    リボンのタブを選択するVBAマクロ

    マクロでリボンのタブを選択する方法として、ActivateTabやAc…

  3. Office関連

    オフライン版のOffice 2016 VBAリファレンスが公開されました。

    「ヘルプファイル版のOffice 2013開発者用リファレンスが公開さ…

  4. Office関連

    Office365APIEditorでMicrosoft Graph APIを手軽に呼び出し!

    下記Tech Communityの記事で、Microsoftのエンジニ…

  5. Office関連

    アドインやテンプレートのバージョンチェックを行うVBAマクロ

    色々なアプリケーションに実装されている、「最新バージョンの確認」機能、…

  6. Office関連

    Internet Explorer用OneNoteアドオンを利用して指定したWebページをOneNo…

    「Evernote Webクリッパーで指定したWebページをEvern…

コメント

    • mm
    • 2014年 1月 21日

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

  1. > mm様

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

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP