从 ThisOutlookSession 调用宏

Call a macro from ThisOutlookSession

我在 outlook 上的宏有问题。

我目前正在尝试通过批处理调用 outlook 并将其作为参数传递给我通过我在批处理中设置的环境变量获得的宏名称。但是我确实得到了我的宏的名称,但是该过程在调用函数时停止了。有人可以告诉我正确的方法吗?

VBA 这个 OutlookSession

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=

结果

这里有几个方面...第一点是处理 Outlook 时可能存在的安全问题。您可以在 Security Behavior of the Outlook Object Model 文章中阅读更多相关信息。

另一点是,您可以通过以下方式(例如,从任何其他 Office 应用程序)调用在 ThisOutlookSession 模块中声明的 VBA 宏:

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

其中 HelloWorld sub 在 ThisOutlookSession 模块中声明如下:

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

请注意,您可以调用 ThisOutlookSession 模块中的任何模块。无需直接访问其他模块。