首页 文章

单元格值更改时自动运行VBA宏

提问于
浏览
0

我有一个包含许多工作表的大型工作簿 . 每个工作表都包含用户输入和计算的组合,以及大多数链接到其他工作表上的输入或输出 . 该工作簿还有一个包含许多自定义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架构”,所以有人可以用可理解的术语和我需要做的具体事情或代码添加到模块或工作表(或两者)的方向提供答案 .

2 回答

  • 0

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

    我注意到你在评论中提到你希望你的宏在Sheet 7上的任何特定单元格更改时运行 . 如果你只是在你的VBA编辑器中将下面的代码粘贴到Sheet 7中,它应该可以解决问题(这里,我假设您希望单元格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
    

相关问题