从 Excel VBA 将页眉/页脚插入到新创建的 Word 文档中

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/40403895/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-12 11:27:55  来源:igfitidea点击:

Inserting Header/Footer into newly created word document from Excel VBA

excelvbaexcel-vbaword-vba

提问by user2048724

I'm trying to create word document from content in Excel. When I tryto add header/footer in the word, I'm getting an error "Run Time Error 5941 : The requested member of the collection does not exist" on line .Headers(wdHeaderFooterPrimary).Range.Text = "Header text". Please suggest how I can work with this?

我正在尝试从 Excel 中的内容创建 Word 文档。当我尝试在单词中添加页眉/页脚时,我在 .Headers(wdHeaderFooterPrimary).Range.Text = "Header text" 行上收到错误“运行时错误 5941:集合的请求成员不存在”。请建议我如何处理这个问题?

Sub CreateFAQWord()
Dim myRow As Long
Dim objWord As Object
Dim objDoc As Object
Dim question As String
Dim answer As String
Dim rng As Range
Dim i As Long

Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set objDoc = objWord.Documents.Add()

objWord.Selection.Style = objDoc.Styles("Title")
objWord.Selection.Paragraphs.Alignment = 1
objWord.Selection.TypeText Text:="Title"
objWord.Selection.TypeParagraph
objWord.Selection.TypeParagraph

With objDoc
    .Styles.Add ("BoldNormal")
        With .Styles("BoldNormal").Font
            .Name = "Calibri"
            .Size = 11
            .Bold = True
            .Italic = True
            .Underline = False
        End With
End With
myRow = 2
' Value 2 here is the column in which questions are present. Change accordingly
While Cells(myRow, 2).Value <> ""
    ' Value 9 here is the column in which Yes/No is present. Change accordingly
    If Cells(myRow, 9) = "Yes" Then
        objDoc.Activate
        question = Cells(myRow, 2)
        answer = Cells(myRow, 3)
        objWord.Selection.Style = objDoc.Styles("BoldNormal")
        objWord.Selection.TypeText Text:=question
        objWord.Selection.TypeParagraph
        objWord.Selection.Style = objDoc.Styles("Normal")
        objWord.Selection.TypeText Text:=answer
        objWord.Selection.TypeParagraph
        objWord.Selection.TypeParagraph
    End If
    myRow = myRow + 1
Wend

For i = 1 To objDoc.Sections.Count
   With objDoc.Sections(i)
       .Headers(wdHeaderFooterIndex.wdHeaderFooterPrimary).Range.Text = "Header text"
       .Footers(wdHeaderFooterIndex.wdHeaderFooterPrimary).Range.Text = "Footer text"
   End With
Next

' Change the location path of where you want the document to be saved as needed
objDoc.SaveAs "C:\Users21282\Desktop\FAQ"
End Sub

采纳答案by Niclas

I do not think you can use .Range.Text
Instead try to assign a reference to a range object. To make this work you need to add the "Microsoft Word XX.X Object Library" under references.

我不认为您可以使用.Range.Text
代替尝试分配对范围对象的引用。要完成这项工作,您需要在引用下添加“Microsoft Word XX.X 对象库”。

Dim objRange as Word.Range

For i = 1 To objDoc.Sections.Count
With objDoc.Sections(i)

    Set objRange = .Headers(wdHeaderFooterIndex.wdHeaderFooterPrimary).Range
    objRange = "Header Text"
    Set objRange = Nothing

    Set objRange = .Footers(wdHeaderFooterIndex.wdHeaderFooterPrimary).Range
    objRange = "Footer text"
    Set objRange = Nothing
End With
Next