我正在尝试使用VBA Excel将表格从excel粘贴到word中。
我将其粘贴到我在 Word 中创建的 4 行单列表的单元格中。所以它本质上是一个嵌套表。
我一直得到,
运行时错误 4605:对象选择的方法"粘贴为嵌套表"失败
我正在尝试使用 PastAsNestedTable,因为否则我会在尝试合并两个表时收到有关单元格不匹配的运行时错误。
所以我明白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
我可以以某种方式以这种方式复制它吗?
不要使用选择。这对我来说有用(已打开正确文档的 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
您当然可以将GetObject(, "Word.Application")
替换为new Word.Application
并将 wdDoc 设置为 wdApp.Documents.Open(pathtoyourdoc)
。然后结合我从你的另一个线程的答案,用wdDoc
替换那里wd
,你应该很高兴。
编辑我已更改代码以反映您当前的变量和书签名称:
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)
注意:
- 不要使用杜门特。添加,因为这将基于模板添加新的空文档。这将没有您的书签。请改用
.Open
。 - 正确关闭
With
块 - 不要一遍又一遍地设置同一个对象。设置一次并使用该对象
- 除非绝对必要,否则请勿使用
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