微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从Excel VBA向Word Doc添加目录

如何解决从Excel VBA向Word Doc添加目录

我正在尝试操纵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调用单词macro时,我可以很好地使用此宏,但是在这种情况下,我似乎无法识别文档对象。这需要完全从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字段而不是使用代码添加它呢?

我用了一些代码来在新文档中创建目录,然后将其另存为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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。