单元格值更改时自动运行VBAmacros

我有很多工作表的大型工作簿。 每个工作表都包含用户input和计算的组合,并且大多数链接到其他工作表上的input或输出。 该工作簿还包含一个包含一些自定义VBA函数的模块。

我试图自动goalseek位于未选中/非活动工作表上的单元格,如果用户更改活动工作表上的值,该值与链接到另一个表单上的计算input,我希望goalseek。 一个例子:

“Sheet7”上的单元格A1包含一个数字,该数字是基于同一工作表的单元格A2,A3和A4中的值计算结果的“猜测”(例如,A1是A2 + A3 + A4的名义结果) 。 单元格A2,A3和A4是来自另外三个工作表的计算结果的链接。 “Sheet7”上的单元格A5是A2 + A3 + A4的实际结果,它可能与A1中的值不匹配。 单元格A6是A6中的计算结果与A1中的值之间的差异,我将A6的目标search值确保为A5中的计算值始终与A1中的“硬编码”值匹配。

即使在发生更改时未select“Sheet7”,我也希望在任何时候A2,A3或A4的值都会在“Sheet7”上发生变化。 A2可以链接到“Sheet2”,A3可以链接到“Sheet14”,A4可以链接到“Sheet9”。 如果用户select了“Sheet2”,并更改了某些改变链接到“Sheet7”上的单元格A2的值,我希望这个macros运行(原因是“Sheet7”A1值链接回其他一些工作表而且保持更新或整个工作簿中的整个计算链都失败很重要)。

如果select了“Sheet7”,并且更改了A2,A3或A4,所有macros示例/post都find了工作,但是如果select了其他工作表并进行更改,链接值将更改,macros将不会运行我尝试过的所有代码变体

我对整个“VBA体系结构”没有很好的处理,所以有人可以用可理解的术语和方向来提供我需要做的或者将代码添加到模块或工作表(或两者) 。

你可以使用“手动计算”-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 

你需要改变它以适应你的需求,但它仍然应该把你推向正确的方向;)

我注意到在你的评论中你提到过你希望你的macros能够在Sheet7中任何特定的单元格发生变化时运行。如果你只是将下面的代码粘贴到你的VBA编辑器中的Sheet7中,它应该能够实现这个function(在这里,我假设你希望单元格H5改变,一旦它改变了,你应该得到消息“WORKS”,如果确实出现了,那么你做的一切都正确,可以用你需要的那个代替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