2016-09-15 17 views
0

ここでは、Word文書を制御するためのExcelのコードを示します。 私はここで様々なスタイルにテキストの一部を作成したいが、実行時エラー430を取得しておく(クラスはオートメーションをサポートしていないか、予測したインターフェースをサポートしていません)VBAの見出しスタイルをExcelからWordに適用する

でしょうがコードです:

'Create the word document 
    Set objWord = CreateObject("Word.Application") 
    Set objDoc = objWord.Documents.Add 
    objWord.Visible = True 
    Set objSelection = objWord.Selection 


    For i = 2 To 94 
     'Heading 1 
     If myRange(i - 1, 1) <> myRange(i, 1) Then 
      objSelection.TypeParagraph 
      objSelection.Style = ActiveDocument.Styles("Heading 2") 
      objSelection.TypeText Text:=myRange(i, 1) 
     End If 
     objSelection.TypeParagraph 
     objSelection.Style = ActiveDocument.Styles("Heading 3") 
     objSelection.TypeText Text:=myRange(i, 2) 
     For k = 3 To 12 
      objSelection.TypeParagraph 
      objSelection.Style = ActiveDocument.Styles("Heading 4") 
      objSelection.TypeText Text:=myRange(1, k) 
      objSelection.TypeParagraph 
      objSelection.Style = ActiveDocument.Styles("Normal") 
      objSelection.TypeText Text:=myRange(i, k) 
     Next 
    Next 
+0

でエラーが発生した行は何ですか? –

+0

初期の考え:あなたの 'myRange'変数は、それがExcel.Rangeオブジェクトですか?その場合、オブジェクトに対して正しい値を提供していません。 'Range'を' Cell'として使用しているようです。また、Excel VBAで参照できるWordライブラリもあります。最後に、Dirkが言ったように、エラーが発生する場所を指定してください – Zac

+0

私はWordのライブラリを使用しました。唯一の問題は 'objSelection.Style = ActiveDocument.Styles(" ___ ")'です。それは動作していません。残りはうまくいっています。 – user3016795

答えて

0

あなたがする必要はあり:

  • が欲しかった文書のSelectionオブジェクトに任意のウィンドウを設定

    Set objSelection = objDoc.ActiveWindow.Selection 
    
  • 明示的Wordアプリケーション、アクティブなドキュメント参照:

    objSelection.Style = objWord.ActiveDocument.Styles("Heading 2") 
    

また、あなたのコードをクリーンアップし、それを読みやすくするためにWith - End With構文を使用したい場合があり、堅牢に、より速く

Option Explicit 

Sub main()  
'' "early binding" case 
'' requires adding Microsoft Word XX.Y Object Library" reference to your project 
''' Dim objWord As Word.Application '<--| "early binding" requires referencing 'Word' application explicitly 
''' Dim objDoc As Word.document '<--| "early binding" requires referencing 'Word' application explicitly 
''' Dim objSelection As Word.Selection '<--| "early binding" requires referencing 'Word' application explicitly 

' "late binding" case 
    Dim objWord As Object 
    Dim objDoc As Object 
    Dim objSelection As Object 

    Dim myRange As Range '<--| for Excel objects, referencing 'Excel' explicitly is optional 

    Dim i As Long, k As Long '<--| VBA variables 

    Set myRange = ActiveSheet.Range("myRange") '<-- set myRange range object to your active worksheet named range "myRange" 

    Set objWord = CreateObject("Word.Application") '<--| get a new instance of Word 
    Set objDoc = objWord.Documents.Add '<--| add a new Word document 
    objWord.Visible = True 
    Set objSelection = objDoc.ActiveWindow.Selection '<--| get new Word document 'Selection' object 

    With objSelection '<--| reference 'Selection' object 

     For i = 2 To 94 
      'Heading 1 
      If myRange(i - 1, 1) <> myRange(i, 1) Then 
       .TypeParagraph 
       .Style = objWord.ActiveDocument.Styles("Heading 2") 
       .TypeText Text:=myRange(i, 1).Text 
      End If 
      .TypeParagraph 
      .Style = objWord.ActiveDocument.Styles("Heading 3") 
      .TypeText Text:=myRange(i, 2).Text 
      For k = 3 To 12 
       .TypeParagraph 
       .Style = objWord.ActiveDocument.Styles("Heading 4") 
       .TypeText Text:=myRange(1, k).Text 
       .TypeParagraph 
       .Style = objWord.ActiveDocument.Styles("Normal") 
       .TypeText Text:=myRange(i, k).Text 
      Next 
     Next 
    End With 

    objDoc.SaveAs "C:\Users\...\Desktop\Doc1.docx" '<--| save your word document 

    objWord.Quit '<--| quit Word 
    Set objWord = Nothing '<--| release object variable   
End Sub 
+0

@ user3016795、それを通過しましたか? – user3598756

+0

ありがとう! "ActiveDocument"が保存される前にobjWordを追加するコメント: – user3016795

+0

あなたは歓迎です – user3598756

関連する問題