使用WORD VBA将单元格范围从Excel粘贴/复制到Word中的书签

时间:2017-12-09 13:56:35

标签: excel-vba ms-word word-vba bookmarks vba

我正在考虑将Excel中的一系列文本数据(40列)插入/粘贴到Word中的书签中。大多数答案都是使用Excel VBA完成的,这对我的用例来说是不实际的,因为我将Word文档打开,添加一个按钮来运行这个'导入数据'宏。实际上我已经在文档中有一个按钮,可以将图像插入到书签中,这是我不想通过Excel VBA进行操作的另一个原因。

我知道这不是很好的代码,但由于缺乏明确的线索,我将它扔到这里并希望这能让你了解我想要实现的目标:

Sub ImportData()

Workbooks.Open ("\Book2.xlsm")
    ActiveWindow.WindowState = xlMinimized
    ThisWorkbook.Activate

    Windows("Book2.xlsm").Activate
    Range("A1:AF1").Select
    Selection.Copy
    Documents("test.docm").Activate
    Selection.GoTo What:=wdGoToBookmark, Name:="Overlay_1"
    Selection.Paste

End Sub
PS:如果我可以进行“转置”这样的话会很棒。将40个列粘贴到Word中。

根据@Variatus的建议,我的代码更新了:

Sub ImportData()

Dim wb As Workbooks
Dim ws As Worksheets
Dim objSheet As Object
Dim objWord As Object
Set objWord = CreateObject("Word.Application")

wb.Open ("C:\Users\pc\Documents\Book2.xlsm")
Set objSheet = CreateObject("Excel.Application")
ActiveWindow.WindowState = xlMinimized
Set ws = Workbooks("Book2.xlsm").Sheets("Sheet1")
ws.Range("A1").Value.Copy

With objWord.ActiveDocument
    .Bookmarks("Bookmark_1").Range.Text = ws.Range("A1").Value
End With

End Sub

我收到此错误:

  

运行时错误' 91':   对象变量或未设置块变量。

注意我现在如何坚持使用单个单元格引用(A1)。在我学习的过程中,我只是更新我的代码:)

1 个答案:

答案 0 :(得分:0)

单击Word文档中的按钮时,需要启动以下序列。

  1. 创建Excel应用程序对象。确保已设置对Excel的引用(VBE>工具>引用),以便Excel的VBA对象可用。
  2. 使用Excel应用程序对象,打开工作簿。创建一个对象。将对象放在不可见的窗口中。
  3. 绝对忘记在工作簿或Word文档中激活或选择任何内容。后者是活跃的,从始至终保持活跃。书签是文档中的点,您可以通过名称进行引用和操作,而无需选择它们。 Excel工作簿是不可见的。您可以使用Range对象访问它的任何部分。
  4. 您希望从工作簿中获取的数据包含在工作表中。请务必为要从中提取数据的工作表创建一个对象。
  5. Excel表格不能很好地翻译成Word表格。如果您确实希望这样,我建议您使用VBA在Excel中创建所需的表(在将数据导入Word之前转置数据)。但是,您可能会发现在Word中首先创建所需的表更容易,然后只需将Excel源中的值复制到单词表中。这将涉及一次获取一个单元格值并将其放入一个Word表格单元格中。转置将由您使用的算法完成。
  6. 关闭工作簿。退出Excel应用程序。设置Excel应用程序= Nothing。在宏的最后,一切都和以前一样,只是你的文档中包含了以前没有的数据。
  7. 上述六点中的每一点都会引导您至少提出一个问题,在您搜索主题并编写一些代码后,您可以在这里提出问题。实际上,我强烈建议您创建一个Main过程(响应按钮单击的过程)并让该过程调用执行各个任务和功能的各个子站来支持子站点。您创建的部件越小,编写代码就越容易,找到要问的问题并获得答案。如果你计划好你的项目,那么当你完成时,它应该有大约12个程序。祝你好运!