我有一个包含许多工作表的大型工作簿。每个工作表都包含用户输入和计算的组合,以及大多数链接到其他工作表上的输入或输出。该工作簿还有一个包含许多自定义VBA函数的模块。
如果用户更改了活动工作表上的值,并且我想要在另一个工作表上进行计算的输入,我试图自动追踪一个位于未选择/非活动工作表上的单元格目标寻求。一个例子:
“Sheet7”上的单元格A1包含一个数字,该数字是基于同一工作表的单元格A2,A3和A4中的值的计算结果的“猜测”(例如,A1是A2 + A3的名义结果) + A4)。单元格A2,A3和A4是来自其他三个工作表的计算结果的链接。 “Sheet7”上的单元格A5是A2 + A3 + A4的实际结果,可能与A1中的值不匹配。单元格A6是A6中的计算结果与A1中的值之间的差异,并且I是寻求A6到0的目标,以确保A5中的计算值始终与A1中的“硬编码”值匹配。
我希望无论A2,A3或A4的值在“Sheet7”上发生变化,即使在发生更改时未选择“Sheet7”,也会发生此目标。 A2可以链接到“Sheet2”,A3可以链接到“Sheet14”,A4可以链接到“Sheet9”。如果用户选择了“Sheet2”并更改了更改链接到“Sheet7”上的单元格A2的值的内容,我希望此宏运行(原因是“Sheet7”A1值链接回许多其他工作表并且重要的是它保持更新或整个计算链在整个工作簿中失败)。
如果我选择了“Sheet7”并且更改了A2,A3或A4,但是如果我选择了任何其他工作表并进行更改以更改链接值,那么我找到的所有宏示例/帖子都有效无论我尝试过的所有代码变体都没有运行。
我没有很好地处理整个“VBA架构”,所以有人可以用可理解的术语和我需要做的具体事情或代码添加到模块或工作表的方向提供答案(或两者兼而有之。)
答案 0 :(得分:1)
您可以使用“手动计算”-trick。
工作簿只需设置手动计算,然后在“ThisWorkbook”中执行代码:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
Dim a As String
a = Sheets("Sheet7").Range("A5").Value
Calculate
If a <> Sheets("Sheet7").Range("A5").Value Then
'call your seek here
End If
Application.EnableEvents = True
End Sub
你需要改变它以满足你的需要,但它仍然应该把你推向正确的方向;)
答案 1 :(得分:0)
我注意到你在评论中提到你希望你的宏在Sheet 7上的任何特定单元格更改时运行。如果你只是在你的VBA编辑器中将下面的代码粘贴到Sheet 7中,它应该可以解决问题(在这里,我假设您希望更改单元格H5。一旦更改,您应该收到消息&#34; WORKS&#34;如果它确实出现,那么您做的一切都正确,可以用一个替换msgbox代码你需要):
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("H5")) Is Nothing Then
MsgBox "WORKS"
End If
End Sub