Outlook在我的UserForm上给出了这个奇怪的错误

时间:2013-08-20 14:38:43

标签: vba outlook-vba

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

以上代码位于我的用户表单上的按钮内。错误说

  

打开一个对话框。关闭它并再试一次

当我将任一代码单独放在一个宏中它工作正常并打开一个新的电子邮件等,但是当我设置宏来加载用户窗体并将代码放在一个命令按钮下时,它会给出一个错误对话框:

Run-time error '2147467259 (80004005)'

A dialog box is open. Close it and try again.

Outlook已打开,宏位于工具栏上。

模块1(代码)

sub email() 
Load userform3
userform3.show
end sub

加载我的菜单

2 个答案:

答案 0 :(得分:2)

如果您完全从Outlook运行(并且不使用其他应用程序自动发送电子邮件,即从Excel或PowerPoint等),那么这就是问题所在:

您正在以模态方式显示UserForm3。这意味着应用程序基本上处于保持状态,同时显示表单。

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

userform3.show vbModeless

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

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

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

答案 1 :(得分:1)

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

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

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