Я уже просмотрел пару похожих постов здесь , здесь , здесь (включая ссылку) и здесь в тщательном подробно и не нашел ничего, что помогло.
Мой сценарий запускается в оценке конструкции Excel и выводит черновик предложения в Word. Общая структура программы состоит из трех частей:
- Она извлекает данные из активной рабочей таблицы (строки 1-226), затем
- Она запрашивает у пользователя какую-то окончательную информацию бит информации через пользовательскую форму (строки 227-265), затем
- Он открывает шаблон бланка в Word и выгружает в него все (строки 266-763).
Первый Когда я запускаю скрипт из оценки Excel, он выполняется безупречно, вплоть до сохранения документа Word. Но если я закрою , который сгенерировал документ Word, и снова нажму кнопку "Черновик предложения" снова , он попадет в очень конкретную строку c, не далеко от части программы Word. и выдает ошибку каждый раз. Эта ошибка:
«Ошибка времени выполнения 462: удаленный сервер не существует или недоступен».
Вот сценарий, начинающийся с начало части слова. Он разрывается на линии, где мы указываем нашу цену в $ TBD, выровненную по правому краю, в конце конечных точек.
Я использовал макрос для генерации этого небольшого блока кода. Я попытался исправить эту ошибку, упростив код здесь. Раньше у меня были ненужные строки wDoc.DefaultTabStop = InchesToPoints(0.5)
и sel.ParagraphFormat.TabStops.ClearAll
, и они обычно ломались на этих строках, но я удалил их обе, и программа все еще ломается прямо в том же месте.
'open the Word document with the appropriate template, bind worksheet & doc together,
'activate the window (bring to front), and move cursor to the end of the document
Dim wApp As Word.Application
Dim wDoc As Word.Document
Set wApp = CreateObject("Word.Application")
Set wDoc = wApp.Documents.Add(Template:="C:\Users\" & MyUserName & "\"
'The rest of the filepath is included here, but I'm omitting it for security purposes, ending in "Letterhead.dotm")
wApp.Visible = True
wApp.Activate
Dim sel As Word.Selection
Set sel = wDoc.Application.Selection
sel.EndKey (wdStory)
'create date and address block
sel.InsertDateTime DateTimeFormat:="MMMM dd, yyyy", InsertAsField:=False
sel.TypeParagraph
sel.TypeParagraph
sel.TypeText Text:=ContactName
sel.TypeText Text:=Chr(11)
sel.Font.Bold = wdToggle
sel.TypeText Text:=GCName
sel.TypeParagraph
sel.TypeParagraph
sel.TypeText "Reference: " & vbTab
sel.TypeText Text:=JobName
sel.Font.Bold = wdToggle
sel.TypeParagraph
sel.TypeParagraph
'create the introductory matter to the proposal
sel.TypeText "We are pleased to offer our proposal for the electrical portion of work " & _
"at " & JobAddress & ". Work is based upon " & ArchitectName & " " & PlanType & _
" drawings, dated " & PlansDated & "."
sel.TypeParagraph
sel.TypeParagraph
'make the line of dots before TBD, copy-pasting from a macro
sel.ParagraphFormat.TabStops.Add Position:=InchesToPoints(6.67), Alignment:=wdAlignTabRight, _
Leader:=wdTabLeaderDots 'This is the two-line statement where it breaks.
Как ни странно, если я удаляю ошибочное выражение, оно продвигается немного дальше, но затем разбивается на другую случайную строку немного дальше, определение свойства .NumberPosition в блоке myNLT With:
'write the price line, and then erase the single-use tab stop we just set up
sel.Font.Bold = wdToggle
sel.TypeText "We will perform this work for" & vbTab & "$TBD"
sel.Font.Bold = wdToggle
sel.TypeParagraph
sel.TypeParagraph
sel.ParagraphFormat.TabStops.ClearAll
'introduce the itemized SOW
sel.Font.Bold = wdToggle
sel.Font.Underline = wdUnderlineSingle
sel.TypeText "Scope of work to include the following:"
sel.TypeParagraph
sel.Font.Underline = wdUnderlineNone
sel.Font.Bold = wdToggle
'set up itemized list, copy-pasting from a macro, list starts at 1
'establish myNLT as the numbered list template
Dim myNLT As ListTemplate
Set myNLT = wApp.ListGalleries(wdNumberGallery).ListTemplates(1)
With myNLT.ListLevels(1)
.NumberFormat = "%1."
.TrailingCharacter = wdTrailingTab
.NumberStyle = wdListNumberStyleArabic
.NumberPosition = InchesToPoints(0.25) 'If I delete the line indicated
'in the previous block of code, then this is the next place it breaks.
.Alignment = wdListLevelAlignLeft
.TextPosition = InchesToPoints(0.5)
.ResetOnHigher = 0
.StartAt = 1
.LinkedStyle = ""
End With
Я пробовал On Error Resume Next
и даже пытался добавить, как "Далее", Application.Wait
в течение двух секунд с последующим повторением TabStops.Add
, но это только испортило мое форматирование.
Я также попытался изменить sel.ParagraphFormat.Tabstops.Add
на Word.Selection.ParagraphFormat.TabStops.Add
- тоже не сработало.
После предложения в комментариях тоже не сработало: если я удаляю все после .Add
, получаю
Ошибка компиляции: аргумент не является обязательным.
Если я затем добавлю обратно в первый аргумент, Position:=InchesToPoints(6.67)
и оставлю без Alignment
и Leader
, тогда ошибка возвращается.