2017-02-15 10 views
0

VBA ExcelでExcelのテーブルに単語を貼り付けようとしています。VBAはExcelのデータをWordのテーブルにExcelから入れ子にします(WordのテーブルにExcelのデータをコピーする)

Wordで作成した4列の単一列テーブルのセルに貼り付けています。したがって、基本的にネストしたテーブルです。

私はそう、私は2つのテーブルをマージしようとしているように、細胞が一致しない程度実行時エラーを取得するので、私はPastAsNestedTableを使用しようとしている

Run-time error 4605: Method 'PasteAsNestedTable' of object Selection failed

、得続けます。

PasteAsNestedTableは選択方法ではありませんが、この問題を回避するにはどうすればいいですか?

私の更新されたコードは行く:私は範囲を作った場合

Dim wdApp As Word.Application 
Dim wdDoc as Word.Document 
Dim tabl1 as Table, tabl2 as Table 
Set wdApp = new Word.Application 
With wdApp 
    .visible = True 
    .Activate 
    .Document.Add(location) 

Set wdDoc=wdApp.ActiveDocument 
With wdApp 
    Charts("chart1").ChartArea.Copy 
    .Selection.GoTo what:=-1,Name:="chart1" 
    .selection.Paste 
(Then add some more charts) 

End With 

Sheets("Sheet1").Range("A1:F10").Copy 
    Set wdDoc=wdApp.ActiveDocument 
    wdDoc.Bookmarks("table").Range.PasteAsNestedTable 

With wdApp 
(Then repeat above pasting charts + tables) 

`

ListObjects私は何とかそのようにそれをコピーだろうか?

+0

これはお使いになりましたか? https://msdn.microsoft.com/en-us/library/office/ff837670.aspx –

+0

'wdApp'は完全に空のドキュメントを持つ新しいWordアプリケーションであるため、コードは機能しません。ブックマーク「テーブルスペース」はありません。そして '.Selection.GoTo what:= - 1 Name:=" tableplace "'は、パラメータの間にカンマがありません。だから、それはコンパイルされません。 –

+0

@AxelRichter、私はテンプレートを開く行を除外しました。テンプレートには "tablespace"というブックマークがあります。私は '.Selection.GoTo what:= - 1 Name:=" tableplace "'という形式を使ってWord文書の他のブックマークにチャートをコピーしても問題ありません。 – JoshD

答えて

1

選択を使用しないでください。ここ これは(すでに開いて正しい文書でWord)私の作品:

Dim wdApp As Word.Application 
Dim wdDoc As Word.Document 

Set wdApp = GetObject(, "Word.Application") 
Sheets(1).Range("A1:F10").Copy 
Set wdDoc = wdApp.ActiveDocument 
wdDoc.Bookmarks("tableplace").Range.PasteAsNestedTable 

あなたはもちろん、あなたのnew Word.ApplicationGetObject(, "Word.Application")を交換し、wdApp.Documents.Open(pathtoyourdoc)としてwdDocを設定することができます。 次に、あなたの他のスレッドからの私の答えと組み合わせて、をwdDocと置き換えてください。

編集私はあなたの現在の変数とブックマークの名前を反映するために自分のコードを変更しました:

Dim wdApp As Word.Application 
Dim wdDoc As Word.Document 
Dim tabl1 As Table, tabl2 As Table 

Set wdApp = New Word.Application 

With wdApp 
    .Visible = True 
    .Activate 
    Set wdDoc = .Documents.Open(Location) 
End With 

Charts("chart1").ChartArea.Copy 
wdDoc.Bookmarks("chart1").Range.Paste 

Sheets("Sheet1").Range("A1:F10").Copy 
wdDoc.Bookmarks("table").Range.PasteAsNestedTable 

'(Continue like this for other charts + tables) 

注:

  • これが追加されますよう、Doument .Addを使用しないでください新しい文書はテンプレートに基づいています。これはあなたのしおりを持っていません。代わりに.Openを使用してください。
  • Withブロックを正しく閉じる
  • 同じオブジェクトを何度も何度も繰り返し設定しないでください。一度設定してそのオブジェクトで作業してください
  • 絶対に必要でない限りSelectionを使用しないでください。この場合は必要ありません。
+0

それは仕事の種類。 3つの異なる場所に3つのテーブルを貼り付ける必要があります。最初の2つについては、ランタイムエラー '4605'が表示されます。オブジェクト 'range'の 'pasteasnestedtable'メソッドが失敗しました。しかし、私がデバッグとF5を押すと、正しく貼り付けられ続けます。しかし、3番目の1つは、実行時エラー '5941'です:コレクションの要求されたメンバーが存在しません。私はこれを修正するための熱い考えがありません – JoshD

+0

@ JoshDエラーが発生する正確な行を投稿してください。シートは不明ですか?範囲外のセル範囲?挿入前に誤って名前を誤って削除しましたか?非常に多くの可能性。 – LocEngineer

+0

ハ、ちょうどタイピングの途中だった。 3番目のペーストRE 5941は私のタイプミスでした。謝罪。 RE 4605は 'wdDoc.Bookmarks(" tablespace ")という行で発生します。Range.PasteAsNestedTable' – JoshD

0

WordでDocVariablesを設定できます。あなたがこれを行う方法がわからない場合は、これをGoogleに送ってください。次に、Excelから以下のスクリプトを実行します。

Sub PushToWord() 

Dim objWord As New Word.Application 
Dim doc As Word.Document 
Dim bkmk As Word.Bookmark 
sWdFileName = Application.GetOpenFilename(, , , , False) 
Set doc = objWord.Documents.Open(sWdFileName) 
'On Error Resume Next 

objWord.ActiveDocument.variables("FirstName").Value = Range("FirstName").Value 
objWord.ActiveDocument.variables("LastName").Value = Range("LastName").Value 
objWord.ActiveDocument.variables("Another").Value = Range("Another").Value 


objWord.ActiveDocument.Fields.Update 

'On Error Resume Next 
objWord.Visible = True 

End Sub 
関連する問題