繁体   English   中英

从 excel VBA 将目录添加到 word Doc

[英]Adding table of contents to word Doc from excel VBA

我试图操纵 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”-“对象不支持此属性或方法。

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

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

您需要区分 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。 我希望这有帮助。 这需要参考字 object model。


    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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM