本文演示的例子是,在Excel中使用VBA打开新的Word文档,复制Excel图表并粘贴到这个文档中。同时,介绍了一种你不熟悉Word VBA的情形下怎样获取相关的代码并在Excel中使用的方法。
首先,在Word中,我们录制一个打开新文档的宏。
单击功能区“开发工具”选项卡中的“录制宏”按钮,然后单击“文件——新建——空白文档”,接着单击“开发工具”选项卡中的“停止录制”按钮。
在Word中打开VBE,可以看到录制的宏代码类似如下:
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中使用如下声明代码:
Dim WordApp As Word.Application
Set WordApp = New Word.Application
接下来,从Word VBE中复制刚才录制的代码到Excel VBE中并稍作调整。在Word VBA中使用Documents.Add开始,在Excel VBA中修改为WordApp.Documents.Add,并且在VBA代码中通常不需要选择并激活对象,因此,修改后的代码如下:
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文档可见,添加了下面的代码:
WordApp.Visible = True
当然,在Excel中,也可以使用宏录制器录制代码,本示例中是复制工作表中的图表。
Sub 宏1()
'
' 宏1 宏
'
'
ActiveSheet.ChartObjects("图表1").Activate
ActiveChart.ChartArea.Copy
End Sub
再回到Word中,录制粘贴图表到文档中的代码:
Sub 宏3()
'
' 宏3 宏
'
'
Selection.PasteSpecial Link:=True, DataType:=wdPasteOLEObject, Placement:= _
wdInLine, DisplayAsIcon:=False
End Sub
那么,现在可以将上面的两段代码添加到我们的Excel VBE的代码中,记住,对于Word VBE中复制过来的代码,要添加wordApp前缀。代码如下:
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,你可以对录制的代码进行简化,让代码更有效率。