#excel #vba #ms-word
#excel #vba #ms-word
Вопрос:
Я пытаюсь манипулировать word form Excel, мне трудно установить диапазон слов в Excel. Затем, как только я установлю этот диапазон, я хотел бы вставить оглавление в этот диапазон.
Вот фрагмент моего кода:
Dim wordApp As Object
Set wordApp = CreateObject("word.application")
Set wDoc = wordApp.Documents.Open(fileName:=templateLocation, ReadOnly:=False)
Dim TOCRange As Word.Range 'establishing my word range
Set TOCRange = wDoc.Paragraphs(3).Range
TOCRange.SetRange Start:=TOCRange.Start, End:=wDoc.Paragraphs(3).Range.End
'inserting the table of contents ERROR
wDoc.tableOfContents.Add Range:=TOCRange, RightAlignPageNumbers:=True, _
UseHeadingStyles:=True, IncludePageNumbers:=True, UseHyperlinks:=False, _
HidePageNumbersInWeb:=True, UseOutlineLevels:=False
В результате я получаю ошибку времени выполнения ‘438’
-«Объект не поддерживает это свойство или метод.
Я могу нормально использовать этот макрос при вызове макроса word из Excel, но, похоже, в этом случае я не могу идентифицировать объект document. Это должно быть сделано полностью из формы Excel, поскольку в моих документах шаблонов не может быть никакого кода vba.
Мы были бы весьма признательны за любую информацию или ресурсы по этой теме. Пытаюсь становиться лучше с каждым днем!
Комментарии:
1.
TablesOfContents.Add
верно? Я думаю, вам не хватаетs
.2. вау, большое вам спасибо. Не могу поверить, что все это время я писал это неправильно, хахахахахаха. вы — легенда.
Ответ №1:
Вам нужно различать документ и шаблон в Word. Это жаргон. В Word шаблон — это очень специфический вид файла. Обычно вы не открываете шаблоны, а скорее добавляете документы на основе шаблона, используя документы.Добавить метод. Вот ссылка на этот метод. https://learn.microsoft.com/en-us/office/vba/api/word.documents.add?f1url=https://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&l=en-US&k=k(vbawd10.chm158072846);k(TargetFrameworkMoniker-Office.Версия=v16)&rd=true&f=255&MSPPError=-2147217396
У меня действительно есть вопрос в связи с этим. Почему бы просто не поместить поле TOC в свой шаблон для начала, а не использовать код для его добавления?
Я немного поиграл с вашим кодом, чтобы просто создать оглавление в новом документе, который затем сохраняю как Deleteme.docx . Я надеюсь, что это поможет. Для этого требуется ссылка на объектную модель Word.
Sub AddTOC()
Dim wordApp As Word.Application
Dim TOCRange As Word.Range 'establishing my word range
Dim wdoc As Word.Document
'
Set wordApp = GetObject(Class:="Word.Application")
'Set wordApp = CreateObject("word.application")
Set wdoc = wordApp.Documents.Add 'Open(Filename:=templateLocation, ReadOnly:=False)
Set TOCRange = wdoc.Range
TOCRange.Paragraphs.Add
TOCRange.Paragraphs.Add
TOCRange.Paragraphs.Add
Set TOCRange = wdoc.Paragraphs(3).Range
wdoc.TablesOfContents.Add Range:=TOCRange ' This does the same as your code
wdoc.SaveAs2 Filename:="Deleteme.docx"
wdoc.Close
Set TOCRange = nothing
Set wdoc = nothing
Set wordApp = nothing
' Debug.Print wdoc.Name
' Set TOCRange = wdoc.Paragraphs(3).Range
' TOCRange.SetRange Start:=TOCRange.Start, End:=wdoc.Paragraphs(3).Range.End
'
' 'inserting the table of contents ERROR
'
' wdoc.tableOfContents.Add Range:=TOCRange, RightAlignPageNumbers:=True, _
' UseHeadingStyles:=True, IncludePageNumbers:=True, UseHyperlinks:=False, _
' HidePageNumbersInWeb:=True, UseOutlineLevels:=False
End Sub
Комментарии:
1. Спасибо за помощь и пример кода. Чтобы ответить на ваш вопрос, я размещаю оглавление после того, как я сгенерировал форму, потому что у меня есть изображения и информация, размещаемые под определенными именами тегов и тому подобное. При выполнении моего макроса find and replace он захватывает имена тегов, которые есть в оглавлении, и помещает всю связанную информацию в оглавление. Это оставляет предназначенные места для информации пустыми, и впоследствии приходится убирать много беспорядка. текущий подход захватывает диапазон имен тегов и помещает TOC в этот диапазон. пока не знаю, как это сделать, но, надеюсь, скоро! Спасибо
2. Оглавление определяется в зависимости от используемых стилей, уровней структуры или полей TC. Оглавление в вашем исходном коде основано на уровнях заголовков. Это ничего не сделает с тегами. Возможно, вы захотите ознакомиться с объяснением Сюзанны Барнхилл основных принципов построения оглавления в этом поле. — wordfaqs.ssbarnhill.com/TOCTips.htm