【问题标题】:Adding table of contents to word Doc from excel VBA从excel VBA将目录添加到word Doc
【发布时间】:2020-08-21 22:41:40
【问题描述】:

我正在尝试操作 Excel 中的单词,我很难在 excel 中建立单词范围。然后,一旦我建立了该范围,我想在该范围中插入一个目录。

这是我的代码的 sn-p:

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” -"对象不支持该属性或方法。

从 excel 中调用 word 宏时,我可以很好地使用此宏,但在这种情况下,我似乎无法识别文档对象。这需要完全从 Excel 表单中完成,因为我的模板文档中不能包含任何 vba 代码。

任何有关此主题的信息或资源将不胜感激。每天都在努力变得更好!

【问题讨论】:

  • TablesOfContents.Add,对吧?我认为您缺少s
  • 哇,非常感谢。我不敢相信我一直都拼错了哈哈哈哈。你是个传奇。

标签: excel vba ms-word


【解决方案1】:

您需要在 Word 中区分文档和模板。这是行话。在 Word 中,模板是一种非常特殊的文件。您通常不打开模板,而是使用 Documents.Add 方法基于模板添加文档。这是该方法的参考。 https://docs.microsoft.com/en-us/office/vba/api/word.documents.add?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev11.query%3FappId%3DDev11IDEF1%26l%3Den-US%26k%3Dk(vbawd10.chm158072846)%3Bk(TargetFrameworkMoniker-Office.Version%3Dv16)%26rd%3Dtrue%26f%3D255%26MSPPError%3D-2147217396

在这方面我确实有一个问题。为什么不直接在模板中添加一个 TOC 字段而不是使用代码添加它?

我对您的代码进行了一些操作,只是在一个新文档中创建了一个 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

【讨论】:

  • 感谢您的帮助和示例代码。为了回答您的问题,我在生成表单后将目录放入其中,因为我将图像和信息放置在某些标签名称等之下。在执行我的查找和替换宏时,它会抓取目录中的标签名称,并将所有相关信息放入目录中。这使得信息的预定家园空白,之后有很多乱七八糟的东西需要清理。当前方法获取 tagName 范围并将 TOC 放置在该范围内。还不知道怎么做,希望很快!谢谢
  • 事物根据所使用的样式、大纲级别或 TC 字段进入 TOC。原始代码中的一个基于标题级别。它不会对标签做任何事情。您可能想查看 Suzanne Barnhill 对如何在该领域构建 TOC 的具体细节的解释。 --- wordfaqs.ssbarnhill.com/TOCTips.htm
猜你喜欢
  • 2018-01-17
  • 2017-07-31
  • 1970-01-01
  • 2018-08-17
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多