Я изменяю часть своего старого кода (который работал нормально), когда наталкиваюсь на этот «Недопустимый вызов процедуры или аргумент» на нетронутом куске кода. Я просто присваиваю значение пользовательскому свойству в слове doc. Раньше у него не было проблем, и теперь это так ... куда я могу наплевать?
Я убедился, что MailRecepient содержит допустимую строку, которая не равна NULL. и CustomProperties должны иметь значение по умолчанию, верно? Значит, оно не должно быть пустым?
Sub LoadTemplate()
'Grab Wordapp or make a new one. duh
If Not WordApp Is Nothing Then
Set WordApp = GetObject(, "Word.Application")
Else
Set WordApp = CreateObject("Word.Application")
End If
Set WordDocs = WordApp.Documents
WordDocs.Add (WordDocumentFilename)
Set DocumentObject = WordApp.activedocument
Set DocumentProperties = WordApp.activedocument.CustomDocumentProperties
End Sub
Private Sub MainLoop()
Dim LoopCounter As String
Dim LoopRange As String 'Pulls A1 to give a range to loop through
LoadWorkbook
LoopCounter = 1
LoopRange = DataObject.Worksheets(DataSheetName).Range("A" & LoopCounter).Value
'main loops for each item. Properties get updated from the doc here.
Do While LoopRange <> ""
'Creation of Mail Message
LoadTemplate
'Pull info from data to
' A = Name
' B = Email
' C = Template
' D = Tableau
MailRecepient = DataObject.Worksheets(DataSheetName).Range("A" & LoopCounter)
MailAddress = DataObject.Worksheets(DataSheetName).Range("B" & LoopCounter)
TemplateName = DataObject.Worksheets(DataSheetName).Range("C" & LoopCounter)
TableauName = DataObject.Worksheets(DataSheetName).Range("D" & LoopCounter)
MailSubject = "Test"
'Throws Run-time Error '5' below.
DocumentProperties.Item("NameField").Value = MailRecepient
DocumentProperties.Item("LinkField").Value = TableauLink
DocumentObject.Fields.Update
DocumentObject.Content.Copy 'Sending the Contents of the Doc to the system clipboard. It'll past lat
SendMail
LoopCounter = LoopCounter + 1
LoopRange = DataObject.Worksheets(DataSheetName).Range("A" & LoopCounter).Value
Loop
'Clean up processes. If this gets bigger we'll move it
DataObject.Close
MsgBox ("Auto Mailing Process Complete. Remove this before going live.")
DocumentObject.Close savechanges:=False
End Sub