0

Outlook のマクロに問題があります。

現在、バッチを介して Outlook を呼び出し、バッチで設定した環境変数を介して取得したマクロの名前をパラメーターとして渡そうとしています。ただし、マクロの名前は取得できますが、Call 関数の時点でプロセスが停止します。誰かが正しい進め方を教えてくれませんか?

VBA ThisOutlookSession

Private Sub Application_Startup()
    Dim strMacroName As String
    strMacroName = CreateObject("WScript.Shell").Environment("process").Item("MacroName")
    'MsgBox strMacroName
    'MsgBox VarType(strMacroName)
    If strMacroName <> "" Then Call strMacroName
    End Sub

VBA モジュール

Option Explicit
Sub macro1()
MsgBox "macro1"
End Sub
Sub macro2()
MsgBox "macro2"
End Sub

バッチ

Set WorkingPath=C:\Temp\Outlook
Set MacroName=%1
start OUTLOOK.EXE
Set MacroName=
Set WorkingPath=

結果

ここに画像の説明を入力

4

1 に答える 1

1

ここにはいくつかの側面があります... 最初のポイントは、Outlook を扱う際に考えられるセキュリティの問題です。詳細については、Outlook オブジェクト モデルのセキュリティ動作に関する記事を参照してください。

もう 1 つのポイントは、モジュールで宣言された VBA マクロを次の方法で呼び出すことができることですThisOutlookSession(たとえば、他の Office アプリケーションから)。

Sub test()
  Dim OutApp As Object
  Set OutApp = CreateObject("Outlook.Application")
  OutApp.Session.Logon
  OutApp.HelloWorld
End Sub

subHelloWorldThisOutlookSessionモジュール内で次のように宣言されます。

Option Explicit
Public Sub HelloWorld()
  MsgBox "Hello world !!"
End Sub

モジュールから任意のモジュールを呼び出すことができることに注意してくださいThisOutlookSession。他のモジュールに直接アクセスする必要はありません。

于 2021-12-21T15:06:45.807 に答える