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

    ConvertToTextメソッドを使ってテーブルを二次元配列に変換するWordマクロ

    WordのTableオブジェクトには、テーブルを解除して文字列に変換す…

  2. Office関連

    類似した書式の文字列を選択するWordマクロ三種

    Wordには、選択中の文字列と似た書式の文字列を一括選択する「類似した…

  3. Office関連

    各スライドに配置されたオートシェイプからテキストを取得するPowerPointマクロ

    各スライドに配置されたオートシェイプからテキストを抜き出す処理を考えて…

  4. Office関連

    パスワードが設定されたファイルを開くPowerPointマクロ

    WordやExcelと違って、PowerPointの場合はOpenメソ…

  5. アイコン一覧

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

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

コメント

    • mm
    • 2014年 1月 21日

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

  1. > mm様

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

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

Time limit is exhausted. Please reload CAPTCHA.

Translate

Chinese (Simplified)Chinese (Traditional)EnglishFrenchGermanJapaneseKoreanRussianSpanish

最近の記事

アーカイブ

PAGE TOP