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

    「入門レベルでは決して足りない実務に必須のスキルとは ExcelVBA 実戦のための技術」レビュー

    久しぶりにVBA参考書籍のレビューです。今回は沢内晴彦氏が執筆され…

  2. Office関連

    [VBA]CommandBars(“○○”).Controls.Addでメニ…

    Officeのユーザインタフェースがリボンに変わってから、下記のように…

  3. Office関連

    [OneNote]クリップボードから新しいページに貼り付け

    何かをメモするとき、ファイルを保存するとき等々、私はよくOneNote…

  4. Office関連

    テキストボックス等Shapeオブジェクトのテキストのみを置換するWordマクロ

    Word MVPの新田さんのブログで気になる記事がありました。…

  5. Office関連

    すべてのテーブルの結合を解除するWordマクロ

    すべてのテーブルのセル結合を解除するWordマクロを考えてみました(W…

  6. Office関連

    [Office 2016]コマンド検索即実行、便利な「Tell Me」機能

    ※ 下記情報はOffice 2016 Preview版を元にしています…

コメント

    • 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