2017-08-06 11 views
1

VBAを使用してExcel内からWord文書を開き、一部のテーブルを文書に挿入しようとしています。テーブルには、Excelの情報が入力されます。テーブルが上書きされているようです

各テーブルは前のテーブルを上書きしているようです。

ここは更新版です。テーブル内にテーブルが作成されていないことを確認する必要があります。 THis is an example of what Is going on

どうすればこの問題を回避できますか?

Dim intNoOfRows 
    Dim intNoOfColumns 
    Dim objWord 
    Dim objDoc 
    Dim objRange 
    Dim objTable 

    intNoOfRows = 5 
    intNoOfColumns = 3 

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

    Set objDoc = objWord.Documents.Add  

    Set objRange = objDoc.Range 

    objDoc.Tables.Add objRange, intNoOfRows, intNoOfColumns  

    Set objTable = objDoc.Tables(1) 

    objTable.Borders.Enable = True 

    For i = 1 To intNoOfRows 
     For j = 1 To intNoOfColumns 

     Next 
    Next 
End Function 
+1

おそらくN君:

'we need the parentheses now because we're using the returned value Set objTable = objDoc.Tables.Add(objRange, intNoOfRows, intNoOfColumns) 

最終的なコードは次のようなものを見ることができますあなたが挿入するために使用している範囲を崩壊するためにeed?しかし、コードなしで知ることは不可能です。 –

+0

シュート、それは私が思ったようにペーストしなかった – user8426180

+0

http://excel-macro.tutorialhorizo​​n.com/vba-excel-add-table-and-fill-data-to-the-word-document/ – user8426180

答えて

0

Wordオブジェクトモデルには、範囲の概念があります。プログラムで作業したい現在のテキストブロックと考えることができます。

この行:

objDoc.Tables.Add objRange, intNoOfRows, intNoOfColumns 

は、与えられた範囲(objRange)に新しいテーブルを追加します。

documentation for the Add methodにおけるパラメータリストを見ると、我々は(強調追加)以下を参照してください。

:範囲

説明:あなたは、テーブルを表示する範囲を。 範囲が縮小されていない場合は、表が範囲を置き換えます。

あなたのコードの前の行を見て:

Set objRange = objDoc.Range 

範囲は、文書全体に及びます。これは他のテーブルだけでなく、ドキュメント内の他のテキストも置き換えるため、おそらくあなたが望むものではありません。

範囲を縮小するには、Collapse methodに電話してください。範囲は、2つの方法で崩壊することができます。範囲の終わりが範囲の開始に移動するか、範囲の開始が範囲の終わりに移動する必要があります。

'objRange.Collapse wdCollapseEnd 
objRange.Collapse 1 

あなたは範囲を崩壊したら、あなたは新しいテーブルを追加することができます。この動作はCollapse方法、またはそれらと同等の値にwdCollapseStartまたはwdCollapseEndに渡すことによって制御されています。

objDoc.Tables.Add objRange, intNoOfRows, intNoOfColumns 

N.B.あなたのコードはレイトバインディングを使用しています。これは、エディタが使用しているさまざまなオブジェクトの形状を認識していないことを意味します。

ツール - >参照...)の参照を追加し、この情報をエディタを提供するために、Microsoft Wordのオブジェクトモデル(または類似したもの)に。あなたは、変数を宣言するときに

その後、あなたは自分のタイプを指定できます。今すぐ

Dim objDoc As Word.Document 

を、あなたはoDoc.を書くとき、エディタは、Word文書の利用可能なメソッドとプロパティを伝えることができます。


このコードには別の問題があります。テーブルが挿入されると、テーブルには数行の処理が行われます。しかし、処理は、文書の中で最も最近追加されたテーブル上で行われることはありませんが、むしろ常に文書の最初のテーブルの上:

objDoc.Tables.Add objRange, intNoOfRows, intNoOfColumns 
Set objTable = objDoc.Tables(1) 'reference to the first table in the document 

この問題を解決する最も簡単な方法は、参照を追加することから返さ用いることであろう表:

Dim objWord As New Word.Application 

'in production, keeping the application invisible is often more performant 
'but while debugging, it's useful to see what's going on in the application 
objWord.Visible = True 

Dim objDoc As Word.Document 
Set objDoc = wdApp.Documents.Add 

Dim objRange As Word.Range 
Set objRange = objDoc.Range 
objRange.Collapse wdCollapseEnd 

Dim intNoOfRows As Integer 
intNoOfRows = 5 
Dim intNoOfColumns As Integer 
intNoOfColumns = 3 
Dim objTable As Word.Table 
Set objTable = objDoc.Tables.Add(objRange, intNoOfRows, intNoOfColumns) 

'Fill the table here 

'Collapse the range again (not sure this is needed) 
objRange.Collapse wdCollapseEnd 
'Now you can add a new table: 
Set objTable = objDoc.Tables.Add(objRange, intNoOfRows, intNoOfColumns) 
+0

ありがとう!いくつかの質問...移行時に折り畳みメソッドを使用して他のテーブルを作成し、後で投稿した同じコード行を使用しますか? – user8426180

+0

一度崩壊すると、私は前のテーブルの下にテーブルを置く方法をまだ分かりません。 – user8426180

+0

@ user8426180 RE _他のコード行:はい。新しいテーブルをドキュメントに挿入すると、テーブル自体への参照があるので、その範囲はもう必要ありません。範囲を必要とする唯一の理由は、ドキュメント内のどこにテーブルを挿入するかをWordに指示するためです。 –

関連する問題