2016-11-03 16 views
1

Excelのコンテンツから単語文書を作成しようとしています。 単語にヘッダー/フッターを追加しようとすると、「実行時エラー5941:コレクションの要求されたメンバーが存在しません」という行が表示されます。ヘッダー(wdHeaderFooterPrimary).Range.Text = "ヘッダーテキスト" 。私はこれをどのように働かせることを提案してください?Excel VBAから新しく作成された単語文書にヘッダー/フッターを挿入

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:\Users\2021282\Desktop\FAQ" 
End Sub 

答えて

0

私はあなたが範囲オブジェクトへの参照を代入しようとする代わりに.Range.Text
を使用することができるとは思いません。この作業を行うには、参照の下に「Microsoft Word XX.X Object Library」を追加する必要があります。

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 
+0

これを試してみましたが、「Dim objRange as Word.Range'は_user定義の型定義されていませんエラーです。参考文献には、Microsoft Officeライブラリがあります。そして、Word.Rangeを使用する代わりにRange型を試してみました。そして、 'Set objRange = .Headers(wdHeaderFooterIndex.wdHeaderFooterPrimary).Range'を_Runとしてタイムエラー242:Object Required_ – user2048724

+0

References – Niclas

+0

の下にMicrosoft Word Object Libraryが必要ですちょうどあなたのコードでそれをテストした、それは動作するはずです。 – Niclas

関連する問題