Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
excel VBA在单元格更改时自动运行宏_Vba_Excel - Fatal编程技术网

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

excel VBA在单元格更改时自动运行宏,vba,excel,Vba,Excel,我在以下链接中找到了很多问题的答案: 我之所以要提出一个新问题,是因为我没有足够的声誉来评论这个帖子,而且我很难将链接的单元格连接到我想要运行的宏 因此,链接的单元格包含一个公式,使其仅在我更改其他单元格时才更改值。我遇到的问题是,只有当我更改单元格的值而不是公式的值时,宏才会运行。我正在寻找一种在公式返回的值发生变化时激活宏的方法 这是我目前的代码: 我的单元格范围命名为“值”,我想隐藏标签“刷新” 很抱歉再次提出另一个问题,但正如我所说,我无法对另一个线程发表评论。使用此代码。它将值存储到工

我在以下链接中找到了很多问题的答案:

我之所以要提出一个新问题,是因为我没有足够的声誉来评论这个帖子,而且我很难将链接的单元格连接到我想要运行的宏

因此,链接的单元格包含一个公式,使其仅在我更改其他单元格时才更改值。我遇到的问题是,只有当我更改单元格的值而不是公式的值时,宏才会运行。我正在寻找一种在公式返回的值发生变化时激活宏的方法

这是我目前的代码:

我的单元格范围命名为“值”,我想隐藏标签“刷新”


很抱歉再次提出另一个问题,但正如我所说,我无法对另一个线程发表评论。

使用此代码。它将值存储到工作表上最后一行\列的单元格中。您需要手动将该值存储在那里一次,但之后每次发生更改时,它都会为您存储该值,以便下次计算工作表时进行检查(并且公式结果可能会发生更改)

Private子工作表_Calculate()
暗黑体字节
bOld=Me.Cells(Me.Rows.Count,Me.Columns.Count)
如果Me.Range(“值”)为粗体,则
Application.EnableEvents=False'以防止无止境循环
单元格(Me.Rows.Count,Me.Columns.Count).Value=Me.Range(“值”).Value'存储新值
Sheet1.Refresh.Visible=False
Application.EnableEvents=True
如果结束
端接头

使用此代码。它将值存储到工作表上最后一行\列的单元格中。您需要手动将该值存储在那里一次,但之后每次发生更改时,它都会为您存储该值,以便下次计算工作表时进行检查(并且公式结果可能会发生更改)

Private子工作表_Calculate()
暗黑体字节
bOld=Me.Cells(Me.Rows.Count,Me.Columns.Count)
如果Me.Range(“值”)为粗体,则
Application.EnableEvents=False'以防止无止境循环
单元格(Me.Rows.Count,Me.Columns.Count).Value=Me.Range(“值”).Value'存储新值
Sheet1.Refresh.Visible=False
Application.EnableEvents=True
如果结束
端接头

公式的值
这是什么意思?您需要在单元格中存档这些值,然后在更改其他内容时检查它们是否相同。或者,您可以在单元格上进行交集,从而使公式计算为其他值。然后,每当这些“原因”单元格中的一个发生变化时,你就可以隐藏标签。@findwindow对不起,我指的是单元格通过计算公式得到的值,如果它是2+2=4,那么它将是4。那么这是同一件事XD
改变单元格的值,而不是公式的值我想有人会建议这样做。在我的工作表中,用户使用下拉列表选择答案。这些Anwer链接到另一张表中的值。因此,当用户更改答案以及公式使用的值时,实际上没有更改单元格值,它只会得到另一个单元格的值。如果这还不够的话,我可以提供更多信息公式的值。这意味着什么?你需要在单元格中存档这些值,然后在你更改其他内容时检查它们是否相同。或者,您可以在单元格上进行交集,从而使公式计算为其他值。然后,每当这些“原因”单元格中的一个发生变化时,你就可以隐藏标签。@findwindow对不起,我指的是单元格通过计算公式得到的值,如果它是2+2=4,那么它将是4。那么这是同一件事XD
改变单元格的值,而不是公式的值我想有人会建议这样做。在我的工作表中,用户使用下拉列表选择答案。这些Anwer链接到另一张表中的值。因此,当用户更改答案以及公式使用的值时,实际上没有更改单元格值,它只会得到另一个单元格的值。如果没有足够的信息,我可以提供更多信息。在用户进行更改后,工作表会自动重新计算吗?还是我必须对其进行编程?@petithome-只要计算设置为自动。如果它们是手动的,则下次用户计算时将触发此代码。在用户进行更改后,工作表是否会自动重新计算自身,或者我是否必须对其进行编程?@petithome-只要将计算设置为自动。如果它们是手动的,则该代码将在用户下次计算时触发。
Private Sub Worksheet_Change(ByVal Target As Range)

    If Intersect(Target, Me.Range("Values")) Is Nothing Then Exit Sub
        Application.EnableEvents = False 'to prevent endless loop

        Sheet1.Refresh.Visible = False

        Application.EnableEvents = True
End Sub
Private Sub Worksheet_Calculate()

Dim bOld as Byte
bOld = Me.Cells(Me.Rows.Count,Me.Columns.Count)

If Me.Range("Values") <> bOld Then 

    Application.EnableEvents = False 'to prevent endless loop
    Me.Cells(Me.Rows.Count,Me.Columns.Count).Value = Me.Range("Values").Value 'store new value
    Sheet1.Refresh.Visible = False
    Application.EnableEvents = True

End If

End Sub