【发布时间】:2018-09-29 04:06:44
【问题描述】:
我正在尝试让 Excel VBA 对工作表之间的链接数据进行“双向”更新。 Sheet1 是汇总表,Sheet2,3,4... 是更详细的数据。挑战在于数据输入可能出现在两个位置...在摘要表 1 中,或在其中一个连接的工作表中。
作为一个类比,这就像拥有一个年度预算摘要工作表,其中包含每个月支出的支持工作表。但是,可以在任一位置输入数据。
简而言之,如果您在Sheet1中并更改数据,它将更新Sheet2,Sheet3,Sheet4等,如果您在Sheet2,Sheet3,Sheet4中并更改数据,它将更新Sheet1中的汇总表.
我找到了一个类似的工作解决方案,可以在 Sheet1 和 Sheet2 之间更新单个单元格 A1:
表 1
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Me.Range("A1")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Sheets("Sheet2").Range("A1").Value = Target.Value
Application.EnableEvents = True
End Sub
表 2
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Me.Range("A1")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Sheets("Sheet1").Range("A1").Value = Target.Value
Application.EnableEvents = True
End Sub
但是,我真正想要的是一个更大的版本,以便在 Sheet1 中更新/同步多个其他工作表中的数据行“汇总表”。每个工作表对应于 Sheet1 表中的一行。
这是工作表所包含内容的简化示例。
Sheet1“汇总表”
A1:C1 'Row 1 data in Summary Table {1,2,3}
A2:C2 'Row 2 data in Summary Table {4,5,6}
Ai:Ci 'Row i data in Summary Table (7,8,9}
表 2
A1:C1 'Data Corresponding to Summary Table Row 1 {1,2,3}
表 3
A1:C1 'Data Corresponding to Summary Table Row 2 {4,5,6}
表 4
A1:C1 'Data Corresponding to Summary Table Row 3 {7,8,9}
对此问题的任何建议将不胜感激! 谢谢!
【问题讨论】:
-
为什么您希望或需要能够在这两个地方进行更改?只在其中一个地方更换并使用简单的公式来保持床单连接不是更好吗?
-
认为这是扩展您发布的代码示例的情况,最好使用 Workbook SheetChange 事件,这将为您节省每张工作表的不同代码位。
-
如果你设法得到你想要的,那不会造成无限循环吗?您更新“sheet1”,因此摘要会自动更新,当摘要更新时,代码会注意到它并再次更新“sheet1”,再次更新摘要等等。
-
完全同意在一个地方输入数据是最好的设计实践......但是在这种情况下我正在尝试不同的东西。
-
您可以在宏运行期间通过
Application.EnableEvents = False关闭更新事件