如题所示,我们如何同步更新两个工作薄中的Sheet的内容呢?
本例要讲的例子是:
比如,我们有两个工作薄,其名称为Book1和Book2,这两个工作薄,放在相同的文件夹下面,即工作薄保存位置一样。
现在,我们要做的就是,当我们修改Book1中的Sheet1里面的单元格内容是,如何同步更新到Book2中的Sheet1呢?
要实现这种效果,最好就是使用VBA了,因为此方法通用性强、功能强大,此外,由于管理维护。
下面我们看一下如何编写此功能的VBA代码吧
如上图,首先在工作薄Book1中,右键点击Sheet1,在弹出的快捷菜单中选择“查看代码”,之后,会弹出编写代码的VBA窗口。
一、代码内容
在VBA代码窗口中,直接输入如下的代码即可:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Workbooks.Open filename:=ThisWorkbook.path & "\book2.xls"
Workbooks("Book1.xls").Windows("Book1.xls").Activate
Workbooks("Book1.xls").Worksheets("Sheet1").Cells.Select
Selection.Copy
Workbooks("Book2.xls").Windows("Book2.xls").Activate
Workbooks("Book2.xls").Worksheets("Sheet1").Cells.Select
Workbooks("Book2.xls").Worksheets("Sheet1").Paste
Application.CutCopyMode = False
Workbooks("Book2.xls").Windows("Book2.xls").Activate
ActiveWindow.Close
End Sub
二、代码解释
以下内容为代码解释:
Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)'此代码是事件名,意思是当对工作薄进行保存时,就执行如下的功能代码。
Workbooks.Open filename:=ThisWorkbook.path & "\book2.xls"'打开Book2.xls
Workbooks("Book1.xls").Windows("Book1.xls").Activate'让已经打开的Book1窗口处于激活状态
Workbooks("Book1.xls").Worksheets("Sheet1").Cells.Select'选择Book1中的Sheet1表的所有单元格
Selection.Copy'将Book1中的Sheet1表的所有被选中单元格的内容复制到剪贴板
Workbooks("Book2.xls").Windows("Book2.xls").Activate'激活Book2窗口
Workbooks("Book2.xls").Worksheets("Sheet1").Cells.Select'选择Book2中的Sheet1表的所有单元格
Workbooks("Book2.xls").Worksheets("Sheet1").Paste'将剪贴板中的内容粘贴到Book2中的Sheet1中
Application.CutCopyMode = False'
Workbooks("Book2.xls").Windows("Book2.xls").Activate'激活Book2窗口
ActiveWindow.Close'关闭Book2工作薄
三、上述代码的使用说明
如何使用上述代码呢,非常简单。
在使用的时候,由于代码是添加在Book1里面的,因此,我们只需要打开Book1,对工作表进行修改,然后,每次修改或最后,点击一次保存操作,这样,已经被修改过的内容,就会自动粘贴到Book2中。
代码原理:实际上,上述的代码功能,是这样的,采用复制粘贴的办法来更新另外一个没有打开的Book2的内容的。
当然,这仅仅是实现简单的功能,我们完全可以在上述代码的基础之上,进行扩展,就可以得出非常灵活非常强大的功能了。