VBA excel嵌套数据从excel到word中的表格(将excel数据复制到Word表格中)

我试图从excel中用VBA Excel粘贴一个表格。

我将它粘贴到一个单元格中,在Word中创build的4行单列表中。 所以它本质上是一个嵌套的表格。

我不断收到,

运行时错误4605:对象select方法“PasteAsNestedTable”失败

我试图使用PastAsNestedTable,否则我得到关于单元格不匹配的运行时错误,因为它试图合并两个表。

所以我得到它说PasteAsNestedTable不是一个select的方法,但我怎么解决这个问题?

我更新的代码是:

 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我可以以某种方式复制它的方式?

不要使用select。 这里适用于我(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.ApplicationreplaceGetObject(, "Word.Application") ,并将wdDoc设置为wdApp.Documents.Open(pathtoyourdoc) 。 然后结合我的答案从你的另一个线程,用wdDocreplacewd ,你应该很好走。

编辑我已更改我的代码以反映您当前的variables和书签名称:

 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 s .Add,因为这将基于模板添加一个新的文档。 这不会有你的书签。 改用.Open
  • closures适当的块
  • 不要一遍又一遍地设置同一个对象。 设置一次,并使用该对象
  • 除非绝对必要,否则不要使用Selection 。 在这种情况下不需要。

您可以在Word中设置DocVariables。 谷歌,如果你不知道如何做到这一点。 然后,从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