在 Outlook VBA 中的模块之间传递对象值

问题描述 投票:0回答:1

我在 Outlook (x64 365 v 2411)、2x Exchange 和 4x MAPI 中配置了 6 个邮箱。如果单击 Outlook 功能区中的“新电子邮件”,则会显示一个表单,用户可以在其中选择荷兰语或英语消息。默认情况下,发件人基于 Outlook 中当前选择的邮箱。

当前在此 Outlook 会话中:

Option Explicit
Private WithEvents objInsp As Outlook.Inspectors
Public objMailItem As Outlook.MailItem

Private Sub objInsp_NewInspector(ByVal Inspector As Inspector)
    If TypeName(Inspector.CurrentItem) = "MailItem" Then
        Set objMailItem = Inspector.CurrentItem
        Load frmNewEmail
        With frmNewEmail
            .StartUpPosition = 2
            .Show False
        End With
    End If
End Sub

到目前为止没有问题,单击“新电子邮件”时会显示该表单。然而,点击btnEnglish后:

Option Explicit

Private Sub btnEnglish_Click()
    Me.hide
    Call MyNewMessage(2)
    Unload Me
End Sub

预期的行为是,当在模块 > MyFunctions 中启动下一个过程时,objMailItem 仍保留该值:

Option Explicit
Public objMailItem As Outlook.MailItem

Public Sub MyNewMessage(lngLangID As Long)
    Dim objMsg As Object
    Dim strSigID As String

    AddTable objMailItem

    strSigID = GetSignatureID(objMailItem, lngLangID)

    VerifySignature objMailItem, strSigID

    With objMailItem
        .Subject = "[Case No. 000000] "
    End With

    frmNewEmail.hide
    Unload frmNewEmail
    Set objMailItem = Nothing
End Sub

在这里我注意到 objMailItem 不再有值了。我尝试使用 objMailItem 作为表单标记并从那里传递它,但 objMailItem 也没有值。尝试几个小时的替代方案并没有帮助。

如何维护 objMailItem 的值并将其传递给其他窗体和模块中的程序?

艺术。

vba forms outlook
1个回答
0
投票

您在两个不同的模块中独立声明

objMailItem
。这是两个自变量。

© www.soinside.com 2019 - 2024. All rights reserved.