【问题标题】:How to Run a Macro if the cell value changes如果单元格值更改,如何运行宏
【发布时间】:2019-04-08 18:12:15
【问题描述】:

我创建了一个基于单元格值进行过滤的宏,效果很好。

Range("A1:L1").AutoFilter Field:=4, Criteria1:=Range("U1")

每次单元格值更改时,我都需要运行此宏。 我写了一个宏,但它不起作用我没有收到任何错误,只是没有任何反应。

我试过了:

Private Sub Worksheet_Tabelle1(ByVal Target As Range)

If Target.Address = "$U$1" Then

Application.EnableEvents = False

Range("A1:L1").AutoFilter Field:=4, Criteria1:=Range("U1")

Application.EnableEvents = True

End If

End Sub

这个版本应该只执行代码而不是调用宏。我将 Worksheet_xxxxx 更改为工作表名称并尝试了其他方法。

我也试过了:

Private Sub Worksheet_Arbeitstabelle(ByVal Target As Range)

If Target.Address = "$U$1" Then

Call Macro1

End If
End Sub

此版本应调用以下宏:

Sub Macro1()


Range("A1:L1").AutoFilter Field:=4, Criteria1:=Range("U1")

End Sub

我将所有 Private Sub 宏放在 Worksheet 上,并将 Macro1 放在一个模块中。 该文件是 .xlsm 并且运行其他宏没有任何问题,所以我不知道它为什么不起作用。我的猜测是我可能对名称做错了所以这里是名称:

【问题讨论】:

标签: excel vba


【解决方案1】:

试试这个:

    Dim KeyCells As Range
    ' The variable KeyCells contains the cells that will
    ' cause an alert when they are changed.
    Set KeyCells = Range("A1:C10")

    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then

        ' Display a message when one of the designated cells has been 
        ' changed.
        ' Place your code here.
        MsgBox "Cell " & Target.Address & " has changed."

    End If
End Sub

【讨论】:

  • 感谢您的建议,但我找到了另一个解决方案
  • @Cedric Intersect 函数实际上更可取。如果更改的范围对应于一个或多个范围,您将能够运行宏。考虑更改您的 If Target.Address... 行。
【解决方案2】:

我变了:

Private Sub Worksheet_Arbeitstabelle(ByVal Target As Range)

收件人:

Private Sub Worksheet_Change(ByVal Target As Range)

@Siddharth Rout 将我链接到: Why MS Excel crashes and closes during Worksheet_Change Sub procedure?

这里说明,Worksheet_后面不用加Sheet的名字 因为代码存储在工作表中,所以不需要告诉它在哪里做东西,因为它不在模块中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    相关资源
    最近更新 更多