2017-05-19 3 views
0

現在、2つのExcel文書間の数値を比較し、その結果をWord文書の表に書き込もうとしています。ドキュメントへの接続を確立できましたが、実際にテーブルを追加することはできません。Excel 2010 VBA経由でWord文書にテーブルを追加する

これは私が持っているものです。

Dim wordObj As Object 
Dim outFile As Object 

On Error Resume Next 
Set wordObj = GetObject(, "Word.Application") 

If wordObj Is Nothing Then 
    Set wordObj = CreateObject("Word.Application") 
End If 

Set outFile = wordObj.Documents.Add 

wordObj.Visible = True 
wordObj.Tables.Add Range:=wordObj.Selection.Range, NumRows:=1, NumColumns:=3 

wordObj.Selection.Tables(1).Select 

With wordObj.Selection 
     .TypeText ("test1") 
     .MoveRight (wordObj.wdCell) 
     .TypeText ("test2") 
     .MoveRight (wordObj.wdCell) 
     .TypeText ("test3") 
     .MoveLeft (wordObj.wdCell) 
     .MoveLeft (wordObj.wdCell) 
     .MoveDown Unit:=wordObj.wdLine, Count:=1   
End With 

私も働いている、わずか3列にページを分割しようとしたが、私が望んでいたとき、私はプログラムが実際の列の間で切り替えるように得ることができませんでした(私はInsertBreak(wdColumnBreak)を使用して試しました)。だからいくつかの理由で、列を追加するが、テーブルはありません

+0

あなたのコードは、あなたが始めてから諦めたようです。あなたがどこを離れたのかを拾う人を見つけるのは難しいでしょう。あなたの質問にあなたが言ったコードを含めてはいかがですか?次に、あなたのためにコードを書く代わりに、誰かがあなたのエラーを修正することができます。私が気付くエラーの1つは、 'wordObj'を可視にすることができないということです。おそらくあなたがしようとしているのは、 'wordObj'が' outFile'を開いたウィンドウをアクティブにすることです。 Excelアプリケーションから 'wordObj'を使用するので、バインディングが問題になる可能性があります。 "Dim outFile As Word.Document'を宣言する方が良いでしょう。 – Variatus

+0

返事をありがとう。私が持っていた唯一の他のコードは、テーブルを選択してそれにいくつかの値を書き込もうとしたところでした。テーブルは最初に存在しなかったので無関係だと思いましたが、私は自分の投稿を編集しました。そして、その時、私はいくつかの誤った参照を変更することによって(つまり、outFileではなくwordObjのプロパティにアクセスしようとする)コードを取得しました。私はあなたの提案に応じてoutFileの宣言をWord.Documentに変更しました –

答えて

0

Tables.Addの問題はあなたが間違ったオブジェクトでそれを呼び出すことですプラスそれは単語のドキュメントのメソッドですので、単語の範囲 "それは何であれ。実際のコードは次のとおりですが、表をコピーして貼り付けています。

Sub aaa() 
    Dim wordObj As New Word.Application 
    Dim outFile As Word.Document 
    Dim s As Worksheet 
    Dim r As Range 

    wordObj.Visible = True 
    Set outFile = wordObj.Documents.Add 
    outFile.Activate 

    Debug.Print "Here!" 

    Set s = ActiveWorkbook.Sheets("Sheet1") 
    Call s.Range("E4:J10").Copy 
    ' Call outFile.Tables.Add(wordObj.ActiveDocument.Range(0, 0), NumRows:=3, NumColumns:=3) 
    Call wordObj.ActiveDocument.Range(0, 0).Paste 
End Sub 
0

コードの精度が足りません。より洗練された方法で構築してください。最初にWordアプリケーションのインスタンスを作成してください。次に、そのアプリケーションでドキュメントを作成させます。次に、その文書にテーブルを配置します。次に、そのテーブル内のセルを探します。そのセルにテキストを追加するだけです。

これとは対照的に、Wordアプリケーションを作成し、文書を作成せず、存在しない文書に表を追加します。おそらく必死になってから、アプリケーションにテキストを追加しようとします。 Wordアプリケーションには選択肢(wordObj.Selection)がありません。文書のみが対象です。

次のコードは、あなたが望むことをします。私はあなたの理解を容易にするためにそれを書いています。そうではないので、「ベビー語」だとは思わないでください。コーナーをカットするだけではありません。あなたはもっと熟練した後にコーナーをカットする方法を学ぶことができます。あなたのコードがより安定していないほど、より多くのコーナーをカットすることができます。

Sub WriteToWordTable() 

    ' declarations for the Excel application: 
    Dim Ws As Worksheet 

    ' declarations for the Word application: 
    Dim wordObj As Word.Application 
    Dim outFile As Word.Document 
    Dim outTable As Word.Table 
    Dim wdRng As Word.Range 

    Set Ws = ActiveSheet 
    Ws.Cells(2, "A").value = "Test1" 

    On Error Resume Next 
    Set wordObj = GetObject(, "Word.Application") 

    If wordObj Is Nothing Then 
     Set wordObj = CreateObject("Word.Application") 
    End If 

    Set outFile = wordObj.Documents.Add 
    With outFile 
     Set wdRng = .Range(0, 0) 
     Set outTable = .Tables.Add(Range:=wdRng, _ 
            NumRows:=1, NumColumns:=3) 
    End With 

    With outTable 
     .Cell(1, 1).Range.Text = Ws.Cells(2, "A").value 
     .Rows.Add 
     .Cell(2, 1).Range.Text = "Test2" 
    End With 

    With wordObj.ActiveWindow 
     .Visible = True 
     .Activate 
    End With 

' outFile.Close 
' wordObj.Quit 
End Sub 

ところで、Word文書をいつでも表示する必要はありません。 Wordアプリケーションを静かに閉じて、Excelで作業を続けることができます。ただし、その目的のために、それを閉じてからWordをシャットダウンする前に、outFileを保存する必要があります。

関連する問題