Ошибка выполнения 438: этот объект не поддерживает это свойство или метод " - PullRequest
0 голосов
/ 31 мая 2018

Я новичок в коде VBA в Excel.Я написал некоторый код, который открывает документ Word, последовательно ищет значения и заменяет их значениями, извлеченными из книги Excel.Вероятно, не самый быстрый способ сделать это, но это работает.Мне нужно «Сохранить как» другое имя файла, в конечном итоге его нужно будет загрузить в SharePoint, используя ту же подпрограмму, но я перейду этот мост, когда доберусь туда.Ниже приведен мой код:

Sub SLAProposal()

ThisCustomer = ThisWorkbook.Sheets("Dashboard").Range("C9").Value
Set wordapp = CreateObject("Word.Application")
wordapp.documents.Open "C:\temp\SLATemp.docx"
wordapp.Visible = True


wordapp.Selection.Find.Text = "<<ClientName>>"
wordapp.Selection.Find.Execute
wordapp.Selection = ThisWorkbook.Sheets("Dashboard").Range("C9").Value
wordapp.Selection.EndOf


wordapp.Selection.Find.Text = "<<inrate>>"
wordapp.Selection.Find.Execute
wordapp.Selection = ThisWorkbook.Sheets("SLA Costing").Range("J20").Value
wordapp.Selection.EndOf

wordapp.Selection.Find.Text = "<<inrate>>"
wordapp.Selection.Find.Execute
wordapp.Selection = ThisWorkbook.Sheets("SLA Costing").Range("J20").Value
wordapp.Selection.EndOf


wordapp.Selection.Find.Text = "<<afterrate>>"
wordapp.Selection.Find.Execute
wordapp.Selection = ThisWorkbook.Sheets("SLA Costing").Range("K20").Value
wordapp.Selection.EndOf

wordapp.Selection.Find.Text = "<<afterrate>>"
wordapp.Selection.Find.Execute
wordapp.Selection = ThisWorkbook.Sheets("SLA Costing").Range("K20").Value
wordapp.Selection.EndOf

wordapp.Selection.Find.Text = "<<otherrate>>"
wordapp.Selection.Find.Execute
wordapp.Selection = ThisWorkbook.Sheets("SLA Costing").Range("L20").Value
wordapp.Selection.EndOf

wordapp.Selection.Find.Text = "<<agreement>>"
wordapp.Selection.Find.Execute
wordapp.Selection = ThisWorkbook.Sheets("SLA Costing").Range("J7").Value
wordapp.Selection.EndOf

wordapp.Selection.Find.Text = "<<hours>>"
wordapp.Selection.Find.Execute
wordapp.Selection = ThisWorkbook.Sheets("SLA Costing").Range("J5").Value
wordapp.Selection.EndOf

wordapp.Selection.Find.Text = "<<inrate>>"
wordapp.Selection.Find.Execute
wordapp.Selection = ThisWorkbook.Sheets("SLA Costing").Range("J20").Value
wordapp.Selection.EndOf

wordapp.Selection.Find.Text = "<<retainer>>"
wordapp.Selection.Find.Execute
wordapp.Selection = ThisWorkbook.Sheets("SLA Costing").Range("J13").Value
wordapp.Selection.EndOf

wordapp.Selection.Find.Text = "<<servicedescription>>"
wordapp.Selection.Find.Execute
wordapp.Selection = ThisWorkbook.Sheets("SLA Costing").Range("K17").Value
wordapp.Selection.EndOf

wordapp.Selection.Find.Text = "<<hoursval>>"
wordapp.Selection.Find.Execute
wordapp.Selection = ThisWorkbook.Sheets("SLA Costing").Range("J14").Value
wordapp.Selection.EndOf

wordapp.Selection.Find.Text = "<<retainer>>"
wordapp.Selection.Find.Execute
wordapp.Selection = ThisWorkbook.Sheets("SLA Costing").Range("J13").Value
wordapp.Selection.EndOf

wordapp.Selection.Find.Text = "<<addons>>"
wordapp.Selection.Find.Execute
wordapp.Selection = ThisWorkbook.Sheets("SLA Costing").Range("J15").Value
wordapp.Selection.EndOf

wordapp.Selection.Find.Text = "<<total>>"
wordapp.Selection.Find.Execute
wordapp.Selection = ThisWorkbook.Sheets("SLA Costing").Range("J17").Value
wordapp.Selection.EndOf

wordapp.Selection.Find.Text = "<<month>>"
wordapp.Selection.Find.Execute
wordapp.Selection = ThisWorkbook.Sheets("Lookup Table").Range("P1").Value
wordapp.Selection.EndOf

wordapp.Selection.Find.Text = "<<year>>"
wordapp.Selection.Find.Execute
wordapp.Selection = ThisWorkbook.Sheets("Lookup Table").Range("P2").Value
wordapp.Selection.EndOf

wordapp.Selection.Find.Text = "<<maxusers>>"
wordapp.Selection.Find.Execute
wordapp.Selection = ThisWorkbook.Sheets("SLA Costing").Range("K21").Value
wordapp.Selection.EndOf

wordapp.documents.SaveAs2 "C:\temp\SLATemp1.docx"


End Sub

Я получаю ошибку времени выполнения 438: этот объект не поддерживает это свойство или метод ", когда он достигает:

wordapp.documents.SaveAs2 "C:\temp\SLATemp1.docx"

Может кто-нибудь посоветовать, почему этоэто тот случай?

Спасибо, Стивен

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Это происходит потому, что в коллекции Documents нет метода SaveAs.Вам необходимо обратиться к конкретному Document объекту.

Объявите и установите переменную для документа Word:

Dim wordDoc as Word.Document
Set wordDoc = wordapp.Documents.Open("file path here")

Позже вы можете использовать этот объект для специального сохранения этого документа:

wordDoc.SaveAs2 "file path here"

В конце подпункта вы должны явно освободить объекты Word:

Set wordDoc = Nothing
Set wordapp = Nothing

И, если вы больше не собираетесь использовать wordapp:

wordapp.Quit

Это особенно важно, если вы не wordapp.Visible = True, потому что в противном случае приложение Word останется запущенным в памяти - один раз при каждом запуске макроса - и оно не завершится, пока Windows не будет закрыта (или кто-то это сделаетс помощью диспетчера задач).

0 голосов
/ 31 мая 2018
 wordapp.documents.SaveAs2 "C:\temp\SLATemp1.docx"

должно быть

 Thisdocument.saveas "C:\temp\SLATemp1.docx"
...