gpt4 book ai didi

excel - 如何控制 VBA 类何时终止

转载 作者:行者123 更新时间:2023-12-04 16:01:46 26 4
gpt4 key购买 nike

我编写了一个 VBA 类模块来从我的 Excel 工作簿创建一个 Outlook Mailitem 并监视 MailItem_Send 事件以在发送 Mailitem 后在我的工作簿中运行一个宏。

类模块如下所示:

Option Explicit

Public MailSubject As String
Public MailRecipient As String
Public MailBody As String

Public WithEvents mOutlook As Outlook.Application
Public WithEvents mMailItem As Outlook.MailItem

Private Sub Class_Initialize()
Set mOutlook = New Outlook.Application
MsgBox "mMailItem Class-object has been initialized"
End Sub

Public Sub CreateAndDisplayMailItem()

Set mMailItem = Outlook.CreateItem(olMailItem)
With mMailItem
.To = MailRecipient
.Subject = MailSubject
.Body = MailBody
.Display
End With

End Sub

Private Sub Class_Terminate()
Set mMailItem = Nothing
MsgBox "mMailItem Class-object has ben terminated"
End Sub

Private Sub mOutlook_ItemSend(ByVal Item As Object, Cancel As Boolean)
MsgBox "mOutlook Item Send Event has ben triggered"
'Call MyMacro
End Sub
  • 在我使用上面显示的类模块从我的 Excel 工作簿创建 Outlook Mailitem 后,Outlook 发送邮件窗口正确打开。

  • 如果我在发送邮件之前停留在“发送邮件”窗口(没有切换到任何其他窗口);我的 ItemSend 事件正确触发。

问题是:

  • 如果我返回到我的 Excel 工作簿(因此我将窗口从显示的 MailItem 更改回我的工作簿),类对象将在我的 MailItem 发送之前终止。

我的 MailItem 中的 Class_Terminate 事件应该在 MailItem 发送后触发!之前没有。

这里使用的类:

Sub Mail_Test()

Dim myMailItem As clsMailItem

Set myMailItem = New clsMailItem
myMailItem.MailSubject = "Test überschrift"
myMailItem.MailBody = "Test Body"
myMailItem.MailRecipient = "xyz@test.de"

myMailItem.CreateAndDisplayMailItem

End Sub

最佳答案

如果我将您的类(class)命名为ol,这对我有用

Option Explicit

Dim xOl As New ol

Sub test()

xOl.MailRecipient = "xyz@abc.com"
xOl.MailBody = "Test"
xOl.MailSubject = "Subject"
xOl.CreateAndDisplayMailItem

End Sub

如果您在 sub 中声明 xOl,它将在 sub 结束时终止。

关于excel - 如何控制 VBA 类何时终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50304217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com