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関連

    ポータブル デバイスからファイルをコピーするVBAマクロ

    mougにあった質問関連のメモです。ポータブル デバイスか…

  2. Office関連

    PDFファイルのフィールドを読み取り専用にするVBAマクロ

    「PDFのフィールドに値を入力した後、読み取り専用にするにはどうしたら…

  3. Office関連

    VBAでインターネット上のファイルをダウンロードする方法をまとめてみました。

    「VBA ファイル ダウンロード」といったキーワード検索でのアクセスが…

  4. Office関連

    「カレンダーから日付入力」をUserFormに移植してみました。

    前回の記事では、Office 用アプリ「カレンダーから日付入力」と同様…

  5. Office関連

    「個人用テンプレートの既定の場所」を設定するWordマクロ

    前回の記事で、Word 2013で個人用テンプレート(カスタム テンプ…

コメント

    • 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