Может ли кто-нибудь помочь мне разобраться, что происходит не так и как его исправить?Получение «Object variable или With block variable not set» при первом использовании document.TypeText с сообщением Outlook
Я пытаюсь автоматизировать отправку электронной почты с информацией о повседневном состоянии. Я попытался автоматизировать это из Access, но продолжал работать (известные, но, видимо, нерешенные) проблемы с GetObject (, «Outlook.Application») с Windows 8.1 64 и Outlook 2013. Поэтому я решил автоматизировать работу с Outlook.
Во всяком случае, я переместил код создания почтового сообщения в Outlook vba и начал запускать Access и запустить код доступа. Это все хорошо и хорошо, пока я не получу создание почтового сообщения. Все начинается нормально, пока не доходит до написания тела сообщения (используя Word в качестве редактора тела). При первой команде «TypeText» я получаю сообщение об ошибке в заголовке. Если я нажму кнопку «Отладка» в диалоговом окне уведомления об ошибках, а затем пропустим одну строчку через строку кода, о которой идет речь, она работает нормально. Я думал, что существует некоторая проблема с синхронизацией, поэтому я застрял в коде 2 секунды. Не повезло. Код в вопросе, с некоторыми другими странностей, связанных с тестированием (в частности, пытается напечатать, а затем удалить текст), ниже:
Public Sub CreateMetrics()
' Mail-sending variables
Dim mailApp As Outlook.Application
Dim accessApp As Access.Application
Dim mail As MailItem
Dim wEditor As Word.Document
Dim boolCreatedApp As Boolean
Dim i As Integer
Set mailApp = Application
' Create an Access application object and open the database
Set accessApp = CreateObject("Access.Application")
accessApp.OpenCurrentDatabase dbLoc
accessApp.Visible = True
' Open the desired form and run the click event hander for the start button
accessApp.DoCmd.OpenForm ("ProcessStatus")
accessApp.Forms![ProcessStatus].StartButton_Click
' Create the outgoing mail message
Set mail = Application.CreateItem(olMailItem)
mail.Display
mail.BodyFormat = olFormatHTML
Set wEditor = mailApp.ActiveInspector.WordEditor
With accessApp.Forms![ProcessStatus]
Debug.Print .lblToList.Caption
Debug.Print .lblSubject.Caption
Debug.Print .lblIntroduction.Caption
Debug.Print .lblAttachFilepath.Caption
End With
mail.To = accessApp.Forms![ProcessStatus].lblToList.Caption
mail.Recipients.ResolveAll
mail.Subject = accessApp.Forms![ProcessStatus].lblSubject.Caption
mail.Attachments.Add accessApp.Forms![ProcessStatus].lblAttachFilepath.Caption
Sleep 2000
' Error occurs in the next line ***********************************************
wEditor.Application.Selection.TypeText Text:="Test"
wEditor.Application.Selection.HomeKey
wEditor.Application.Selection.Delete Count:=4
wEditor.Application.Selection.PasteSpecial DataType:=wdPasteBitmap
wEditor.Application.Selection.HomeKey
wEditor.Application.Selection.TypeText accessApp.Forms![ProcessStatus].lblIntroduction.Caption
wEditor.Application.Selection.TypeText Text:=Chr(13) & Chr(13)
wEditor.Application.Selection.EndKey
' wEditor.Application.Selection.EndKey
' wEditor.Application.Selection.TypeText Text:=Chr(13)
' wEditor.Application.Selection.TypeText Text:=configs("EmailSignature")
' End With
With mailApp.Session.Accounts
i = 1
Do While i <= .Count
' Use either the specified email address OR the last outlook email address
If RegEx_IsStringMatching(.Item(i).SmtpAddress, accessApp.Forms![ProcessStatus].lblSenderRegex.Caption) Or i = .Count Then
mail.SendUsingAccount = .Item(i)
i = .Count + 1
Else
i = i + 1
End If
Loop
End With
mail.Save
accessApp.Quit
End Sub