Vba Outlook在我的用户窗体上出现了这个奇怪的错误

Vba Outlook在我的用户窗体上出现了这个奇怪的错误,vba,outlook,Vba,Outlook,上面的代码在我的用户表单上的一个按钮中。错误是 此时将打开一个对话框。关闭它,然后再试一次 当我将任一代码单独放置在宏中时,它可以正常工作并打开新的电子邮件等,但当我将宏设置为加载用户表单并将代码放置在commandbutton下时,会出现一个错误对话框: Set olMessage = olApp.CreateItem(olMailItem) olMessage.To = strEmailTo olMessage.CC = strEmailCC olMessage.Subject = strS

上面的代码在我的用户表单上的一个按钮中。错误是

此时将打开一个对话框。关闭它,然后再试一次

当我将任一代码单独放置在宏中时,它可以正常工作并打开新的电子邮件等,但当我将宏设置为加载用户表单并将代码放置在commandbutton下时,会出现一个错误对话框:

Set olMessage = olApp.CreateItem(olMailItem)
olMessage.To = strEmailTo
olMessage.CC = strEmailCC
olMessage.Subject = strSubject
olMessage.Body = strBody
olMessage.Importance = olImportanceHigh
olMessage.Sensitivity = olConfidential
olMessage.Display ' Line With Error
Outlook已打开,宏位于工具栏上

模块1(代码)


很好地加载我的菜单

如果您完全从Outlook运行此功能(并且不使用其他应用程序自动发送电子邮件,即从Excel或PowerPoint等),则问题在于:

您正在以模式显示您的
UserForm3
。这意味着当表单显示时,应用程序基本上处于等待状态

要避免此错误,请以无模式显示,如:

sub email() 
Load userform3
userform3.show
end sub
注意:这允许用户在显示表单时与Outlook应用程序交互。这可能是不需要的,在这种情况下,我认为您必须在显示电子邮件之前关闭/隐藏userform。只需在
命令前面添加
Unload Me
。Display
命令:

userform3.show vbModeless

以上两种方法都避免了错误。您选择使用哪一个取决于您的具体需要。

或者,您可以在执行代码之前简单地隐藏表单:

Set olMessage = olApp.CreateItem(olMailItem)
olMessage.To = strEmailTo
olMessage.CC = strEmailCC
olMessage.Subject = strSubject
olMessage.Body = strBody
olMessage.Importance = olImportanceHigh
olMessage.Sensitivity = olConfidential
Unload Me
olMessage.Display ' Line With Error

隐藏用户表单会绕过“打开对话框”错误并保留用户输入。它也比处理VB模式更简单,可以防止不必要的行为。

您是否尝试过关闭“打开”对话框??o_0当应用程序等待您的响应时,宏无法在这种状态下执行。另外,您是否从其他应用程序(如Excel等)运行此VBA?没有打开的对话框。这完全是从Outlook运行的?或者您正在从另一个应用程序自动化Outlook。它完全在Outlook中运行请参见下面我的答案,了解两种解决方案:)
Set olMessage = olApp.CreateItem(olMailItem)
olMessage.To = strEmailTo
olMessage.CC = strEmailCC
olMessage.Subject = strSubject
olMessage.Body = strBody
olMessage.Importance = olImportanceHigh
olMessage.Sensitivity = olConfidential
Unload Me
olMessage.Display ' Line With Error
Private Sub cmdButton_Click()

UserForm3.hide

    Set olMessage = olApp.CreateItem(olMailItem)
    olMessage.To = strEmailTo
    olMessage.CC = strEmailCC
    olMessage.Subject = strSubject
    olMessage.Body = strBody
    olMessage.Importance = olImportanceHigh
    olMessage.Sensitivity = olConfidential
    olMessage.Display ' Line With Error

End Sub