Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何在outlook中禁用电子邮件创建屏幕显示?_Excel_Vba - Fatal编程技术网

Excel 如何在outlook中禁用电子邮件创建屏幕显示?

Excel 如何在outlook中禁用电子邮件创建屏幕显示?,excel,vba,Excel,Vba,下面的代码显示每次运行outlook时outlook中的电子邮件创建屏幕。我尝试从第二个函数中删除.display,但它会导致运行时错误。 我不熟悉VBA宏,请告知如何隐藏正在触发的每个新电子邮件的电子邮件创建屏幕。先谢谢你 Public Sub loopCheck() Dim NumRows As Integer Dim eID As String Dim eName As String Dim eEmail As String Dim supportGroup As String Dim m

下面的代码显示每次运行outlook时outlook中的电子邮件创建屏幕。我尝试从第二个函数中删除.display,但它会导致运行时错误。 我不熟悉VBA宏,请告知如何隐藏正在触发的每个新电子邮件的电子邮件创建屏幕。先谢谢你

Public Sub loopCheck()
Dim NumRows As Integer
Dim eID As String
Dim eName As String
Dim eEmail As String
Dim supportGroup As String
Dim managerEmail As String
Dim acName As String

Dim x As Integer
      Application.ScreenUpdating = False
      NumRows = Worksheets("Data").Range("A5", Range("A5").End(xlDown)).Rows.Count  ' Set numrows = number of rows of data.
      Worksheets("Data").Range("A5").Select ' Select first record.

      For x = 1 To NumRows  ' Establish "For" loop to loop "numrows" number of times.

        eID = Worksheets("Data").Range("A" & x + 4).Value
        eName = Worksheets("Data").Range("B" & x + 4).Value
        eEmail = Worksheets("Data").Range("C" & x + 4).Value
        supportGroup = Worksheets("Data").Range("F" & x + 4).Value
        managerEmail = Worksheets("Data").Range("G" & x + 4).Value
        acName = Worksheets("Data").Range("I" & x + 4).Value


        'Prepare table to be sent locally.
        Worksheets("Data").Range("AA5").Value = eID
        Worksheets("Data").Range("AB5").Value = eName
        Worksheets("Data").Range("AC5").Value = eEmail
        Worksheets("Data").Range("AF5").Value = supportGroup

        managerEmail = managerEmail + ";" + Worksheets("Data").Range("AA1").Value

        'Call Emails function.
        Call Emails(eEmail, managerEmail)

         ActiveCell.Offset(1, 0).Select
      Next

      Application.ScreenUpdating = True
End Sub

Public Sub Emails(y As String, z As String)

Dim outlook As Object
Dim newEmail As Object
Dim xInspect As Object
Dim pageEditor As Object

Dim a As String
Dim b As String

a = y
b = z


Set outlook = CreateObject("Outlook.Application")
Set newEmail = outlook.CreateItem(0)

With newEmail
    .To = a
    .CC = b
    .BCC = ""
    .Subject = "test loop"
    .Body = ""
    .display

    Set xInspect = newEmail.GetInspector
    Set pageEditor = xInspect.WordEditor


    Worksheets("Data").Range("AA4:AF5").Copy

    pageEditor.Application.Selection.Start = Len(.Body)
    pageEditor.Application.Selection.End = pageEditor.Application.Selection.Start
    pageEditor.Application.Selection.PasteAndFormat (wdFormatPlainText)

    .display
    .send
    Set pageEditor = Nothing
    Set xInspect = Nothing
End With

Set newEmail = Nothing
Set outlook = Nothing

End Sub

您的电子邮件子系统中有两个.display实例。如果第一个实例被抑制,它将锁定编辑器,并且不允许程序运行。第二个实例可以被注释掉,发送就足够了。仍然会在屏幕上显示第一个实例。为了完全禁用电子邮件创建屏幕显示,请参考涵盖所有类型发送电子邮件的程序,而不显示电子邮件创建屏幕。方法是在HTML正文中嵌入图像或图表的首选方法


您采用的代码类似于。请参阅Dmitry Streblechenko回答中的开场白”--

您还应该使用MailItem.GetInspector而不是 Application.ActiveInspector,因为消息尚未显示

因此,如果您想抑制电子邮件创建屏幕显示,请采用前面建议的其他方法

此外,尤金·阿斯塔菲耶夫在回答一个问题时也提到了这一点

这是Outlook中的一个已知问题。必须先调用Display方法才能使检查器可见

否则就不行了


我认为您不能通过调用此方法来抑制电子邮件创建屏幕显示。

据我所知,使用
.GetInspector'而不是
.display`在子
子电子邮件中显示(y为字符串,z为字符串)
应该减少屏幕显示的数量。您的
电子邮件子系统中有两个
实例。display
。如果第一个实例被抑制,它将锁定编辑器,不允许程序运行。第二个实例可以被注释掉,
。send
足以让程序工作。第一个实例仍将显示在scr上een.为了完全禁用电子邮件创建屏幕显示,请参考创建用于粘贴电子邮件的临时工作表并随后被程序删除的程序,但程序在没有电子邮件创建屏幕的情况下运行。您采用的代码与SO问题类似。请参阅Dmi回答中的开场白试试Streblechenko”--您还应该使用MailItem.GetInspector而不是Application.ActiveInspector,因为消息尚未显示。因此,如果您想抑制电子邮件创建屏幕显示,请采用前面建议的其他方法。