簡體   English   中英

自 Office 365 升級后,VBA 中的 MailItem.Send 不起作用

[英]MailItem.Send in VBA not functioning since Office 365 upgrade

我們在組織周圍發送了大量電子表格,為了盡可能自動化,我們編寫了一些代碼來自動發送並允許我們仍然輸入正文。

這個特定的腳本從我們的財務系統 (SAP) 中獲取信息,將其轉儲到 Excel 中並通過電子郵件發送給用戶,它會循環多次下載並每次通過電子郵件發送不同的數據。

這在我們的舊 Windows 7 (Office 2010) 機器上運行良好,但我們中的一些人已經獲得了新的 Windows 10 (Office 365) 機器進行試驗。

代碼運行時沒有任何錯誤消息,但是當它到達 .Send 時,它會直接跳轉到 End Sub 並且不發送電子郵件。

我已經嘗試過 EmailItem.Display,您可以看到正在填充的電子郵件,然后在它循環瀏覽其余電子郵件時只在桌面上保持可見。

關於如何解決這個問題的任何想法? 我可以使用 application.send 函數,但我喜歡能夠將自定義文本添加到電子郵件正文中。

謝謝 :)

Sub EmailData()

Dim OL As Object
Dim EmailItem As Object
Dim y As Long
Dim TempChar As String
Dim Bodytext As String
Dim Flds As Variant
Dim EmailText As Range

Application.DisplayAlerts = False
Application.ScreenUpdating = False

'Email Download to nursery

Set OL = CreateObject("Outlook.Application")
Set EmailItem = OL.Createitem(OLMailItem)


'Check File Name is correct
Filename = Range("A1") & ".xls"
For y = 1 To Len(Filename)
    TempChar = Mid(Filename, y, 1)
    Select Case TempChar
    Case Is = "/", "\", "*", "?", """", "<", ">", "|"
    Case Else
        SaveName = SaveName & TempChar
    End Select
Next y
ActiveSheet.Cells.Copy
Workbooks.Add
Selection.PasteSpecial Paste:=xlValues
Selection.PasteSpecial Paste:=xlFormats
With ActiveWindow
    .DisplayGridlines = False
    .DisplayZeros = False
End With
Range("A1:S38").Select
Selection.Locked = True
Selection.FormulaHidden = False
Set EmailText = ActiveSheet.Range("AB1:AB5").SpecialCells(xlCellTypeVisible)

ActiveSheet.Protect ("keepsafe")
ActiveWorkbook.SaveAs Networkpath & "\" & SaveName, , "", , True
ActiveWorkbook.ChangeFileAccess xlReadOnly


 EmailItem.display

'On Error Resume Next
With EmailItem
.To = "Daston@blahblah.uk"
'.To = Range("AA1")
.CC = ""
.BCC = ""
.Subject = Filename
.HTMLBody = RangetoHTML(EmailText)
.Attachments.Add ActiveWorkbook.FullName

.send
End With

Application.Wait (Now + TimeValue("0:00:02"))

Kill Networkpath & "\" & SaveName
ActiveWorkbook.Close False


Set OL = Nothing
Set EmailItem = Nothing

End Sub

這描述了在某些情況下如何“使對象模型完全發揮作用”。

NameSpace.Logon 方法 (Outlook)

“首先,實例化 Outlook 應用程序對象,然后引用一個默認文件夾,例如收件箱。這具有初始化 MAPI 以使用默認配置文件並使對象模型完全運行的副作用。”

Sub InitializeMAPI ()

    ' Start Outlook.
    Dim olApp As Outlook.Application
    Set olApp = CreateObject("Outlook.Application")

    ' Get a session object. 
    Dim olNs As Outlook.NameSpace
    Set olNs = olApp.GetNamespace("MAPI")

    ' Create an instance of the Inbox folder. 
    ' If Outlook is not already running, this has the side
    ' effect of initializing MAPI.
    Dim mailFolder As Outlook.Folder
    Set mailFolder = olNs.GetDefaultFolder(olFolderInbox)

    ' Continue to use the object model to automate Outlook.
End Sub

出於安全目的,HTMLBody、HTMLEditor、Body 和 WordEditor 屬性都受地址信息安全提示的約束,因為郵件正文通常包含發件人或其他人的電子郵件地址。

HKCU\\Software\\Policies\\Microsoft\\office\\16.0\\outlook\\security\\

promptoomaddressbookaccess promptoomaddressinformationaccess

https://support.microsoft.com/en-za/help/926512/information-for-administrators-about-e-mail-security-settings-in-outlo

最可能的原因是 Outlook 安全。

您可以在 HKCU\\Software\\Policies\\Microsoft\\office\\16.0\\outlook\\security 中找到安全配置
(將 16.0 更改為您的辦公版本)

將 promptoomsend 更改為 2(或詢問您的系統管理員),重新啟動 Outlook 並重試。

更多信息https://support.microsoft.com/en-za/help/926512/information-for-administrators-about-e-mail-security-settings-in-outlo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM