经常需要在多个工作表中重复某些数据。可以使用Excel的组合工具,使得在某工作表中输入数据时能够同时将数据输入到多个工作表中。然而,也有更快速且灵活的方式,即使用VBA代码。
在Excel中,有一项能使数据一次放置在多个位置的功能,称之为组。其操作是通过将工作表组合在一起,以便它们在工作簿内建立链接。
手工组合工作表
要手工使用组的功能,只需简单地单击将要输入数据的工作表,并在单击想要放置数据的工作表的标签名时按住Ctrl键。此时,当在工作表的任意单元格中输入数据时,这些数据也将自动输入到已组合的其它工作表中。
要取消工作表组合,只需单击除组合的工作表之外的其它任一工作表标签,或者在工作表标签中单击右键,选择“取消组合工作表”命令。
提示:当将工作表组合在一起时,能够看到标题栏中在工作簿名称后面添加了一对方括号,其中显示“工作组”。这能很方便地查看工作表是否是组合的。建议在完成同步输入数据操作后,取消工作表组合。
虽然上面介绍的方法很容易,但也意味着需要记住工作表是否处于组合状态,并且在不需要时取消组合,否则将存在覆盖其它工作表数据的风险。例如,您可能想仅对某特定的单元格区域同步输入数据,如果在其它区域输入数据时,忘记取消工作表组合则可能覆盖掉其它工作表中已存在的数据或者输入不需要的数据。
自动组合工作表
能够通过使用一些非常简单的VBA代码克服上述缺点。要使这些代码能够工作,必须将它们放置在Sheet对象的私有模块中。即在VBE中右击工作表名称,选择“查看代码”或者双击工作表名称。然后,使用Excel的工作表事件之一,并将代码放置在事件过程中。
首先命名希望成组的单元格区域,以便在其它工作表中自动显示数据。然后,在工作表模块中输入下面的代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Range(”MyRange”), Target) Is Nothing Then
‘有目的的将工作表Sheet5放置在第一位,使之成为活动工作表
Sheets(Array(”Sheet5″, “Sheet3″, “Sheet1″)).Select
Else
Me.Select
End If
End Sub
在代码中,使用了命名的区域MyRange,可以将MyRange修改为您工作表中使用的单元格区域名称,同时修改代码中三个工作表名称为希望组合的工作表名称。

图:自动组合工作表的代码
注意,代码中在数组中使用的第一个工作表名必须是包含代码的工作表,并且您将在该工作表中输入数据。
一旦编写好代码,每次选择工作表中的任意单元格时,代码就会检查是否所选的单元格在命名区域MyRange中。如果在该区域,那么代码将自动组合你希望组合的工作表。如果不在,将通过激活正处理的工作表而取消组合。这项技巧的优点是不需要人工组合工作表,因而没有因为忘记取消组合而造成的危险,同时节省了时间并避免产生障碍。
如果希望在其它工作表中显示相同的数据,但不是出现在相同的单元格地址,那么使用如下的代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range(”MyRange”), Target) Is Nothing Then
With Range(”MyRange”)
.Copy Destination:=Sheets(”Sheet3″).Range(”A1″)
.Copy Destination:=Sheets(”Sheet1″).Range(”D10″)
End With
End If
End Sub
上面的代码也需要放置在Sheet对象的模块中,具体操作与前面内容相同。