第一次收听,第一次打电话。我是一名林务员,正在尝试使用 Excel 为其他类似的行业人士创建商业计划模板。想要创建一个显示在每个工作表上的双向链接表。
问题:我希望在浏览各个工作表(英亩、产量等)时,能够轻松查看和操作几个基本假设/变量。我希望这些假设显示在工作簿/文档的每个工作表上,而不是在工作表或共享视图之间切换。我希望能够在*任何工作表上操作它们,而不仅仅是在源工作表上。
这些将是双向链接(即,不仅仅是引用源工作表中的命名单元格)。单元格将从源工作表链接到所有目标工作表。每个单元格都可以在任何工作表上进行操作,而不仅仅是源工作表。
在页面上,它可能看起来像这样:每张工作表上的相同位置都有相同的小表格。或者它可能是每张工作表上的前两列。
这可能吗?这需要 VBA 解决方案吗?
(我知道如何命名单元格以及工作表之间的链接 - 这不是问题。我也知道如何一次查看多个窗口 - 这不是我想要的解决方案。)
对于任何违反礼仪的行为,我们深表歉意。
答案1
这是一个理论上如何使用宏进行设置的示例。
我在包含标题的范围内有一个表格A1:D5
,我已将其复制到三张工作表上的完全相同的位置。
然后我通过右键单击工作表选项卡并选择“显示代码”将以下代码添加到每张工作表中。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Range(Target.Address), Range("A2:D5")) Is Nothing Then
Application.EnableEvents = False
Sheets(1).Range(Target.Address).Value = Target
Sheets(2).Range(Target.Address).Value = Target
Sheets(3).Range(Target.Address).Value = Target
Application.EnableEvents = True
End If
End Sub
以下是其截图:
因此,Worksheet_Change
检查工作表中所做的任何更改。
首先,我告诉它只查看表格内部所做的更改Range("A2:D5")
,在示例中省略了标题。
然后,我将每张工作表上同一单元格的值设置为新值。
显然,在原始工作表上设置值是多余的,但这只是为了能够轻松地在所有工作表上复制和运行完全相同的代码。
最后,Application.EnableEvents = False
阻止宏所做的任何更改来触发Worksheet_Change
子程序。因为这将导致无限循环。
编辑
如果您有许多工作表,请更改工作表的数量,或者只是喜欢不会重复的灵活代码,您应该循环遍历工作表。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
If Not Application.Intersect(Range(Target.Address), Range("A2:D5")) Is Nothing Then
Application.EnableEvents = False
For i = 1 To Worksheets.Count
Sheets(i).Range(Target.Address).Value = Target
Next i
Application.EnableEvents = True
End If
End Sub