在Excel中使用VBA来自动化Word

2023-08-30 08:30:44 浏览数 (2)

本文演示的例子是,在Excel中使用VBA打开新的Word文档,复制Excel图表并粘贴到这个文档中。同时,介绍了一种你不熟悉Word VBA的情形下怎样获取相关的代码并在Excel中使用的方法。

首先,在Word中,我们录制一个打开新文档的宏。

单击功能区“开发工具”选项卡中的“录制宏”按钮,然后单击“文件——新建——空白文档”,接着单击“开发工具”选项卡中的“停止录制”按钮。

在Word中打开VBE,可以看到录制的宏代码类似如下:

代码语言:javascript复制
Sub 宏1()
'
' 宏1 宏
'
'
 Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0
 Windows("在Excel中使用VBA自动化Word.docx").Activate
End Sub

接着,回到Excel,打开VBE,单击菜单“工具——引用”,在“引用”对话框中,找到并勾选“Microsoft Word xx.x Object Library”库,如下图1所示,单击“确定”。

图1

这样,我们就使用了早期绑定来控制Word,也就可以在Excel VBE中使用如下声明代码:

代码语言:javascript复制
Dim WordApp As Word.Application
Set WordApp = New Word.Application

接下来,从Word VBE中复制刚才录制的代码到Excel VBE中并稍作调整。在Word VBA中使用Documents.Add开始,在Excel VBA中修改为WordApp.Documents.Add,并且在VBA代码中通常不需要选择并激活对象,因此,修改后的代码如下:

代码语言:javascript复制
Sub wordfromexcel()
 Dim WordApp As Word.Application
 Set WordApp = New Word.Application
 
 WordApp.Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0
 '默认情形下,新文档将被隐藏,下面的代码使其可见
 WordApp.Visible = True
 
 Set WordApp = Nothing
End Sub

注意,使用VBA打开应用程序时,通常是在后台打开,因此,要使Word文档可见,添加了下面的代码:

代码语言:javascript复制
WordApp.Visible = True

当然,在Excel中,也可以使用宏录制器录制代码,本示例中是复制工作表中的图表。

代码语言:javascript复制
Sub 宏1()
'
' 宏1 宏
'
'
 ActiveSheet.ChartObjects("图表1").Activate
 ActiveChart.ChartArea.Copy
End Sub

再回到Word中,录制粘贴图表到文档中的代码:

代码语言:javascript复制
Sub 宏3()
'
' 宏3 宏
'
'
 Selection.PasteSpecial Link:=True, DataType:=wdPasteOLEObject, Placement:= _
 wdInLine, DisplayAsIcon:=False
End Sub

那么,现在可以将上面的两段代码添加到我们的Excel VBE的代码中,记住,对于Word VBE中复制过来的代码,要添加wordApp前缀。代码如下:

代码语言:javascript复制
Sub wordfromexcel()
 Dim WordApp As Word.Application
 Set WordApp = New Word.Application
 
 WordApp.Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0
 '默认情形下,新文档将被隐藏,下面的代码使其可见
 WordApp.Visible = True
 
 '从Excel宏录制器复制的代码
 ActiveSheet.ChartObjects("图表1").Activate
 ActiveChart.ChartArea.Copy
 '从Word宏录制器复制的代码,要在前面添加WordApp.
 WordApp.Selection.PasteSpecial Link:=True, DataType:=wdPasteOLEObject, Placement:= _
   wdInLine, DisplayAsIcon:=False
 
 Set WordApp = Nothing
End Sub

至此,在Excel中打开Word并创建新文档,然后将Excel工作表中的图表复制到该文档中的代码完成。

通过重复上述相同步骤:录制简短的操作,然后将代码转移到Excel中,可以逐步构建更复杂的宏。关键是要保持操作的简短,如果用宏录制器做了太多的动作,代码就会显得冗长而可怕。

随着你逐步熟悉VBA,你可以对录制的代码进行简化,让代码更有效率。

0 人点赞