如果单元格值更改,如何运行宏

时间:2019-04-08 08:24:17

标签: excel vba

我创建了一个宏,该宏根据可以正常工作的单元格值进行过滤。

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宏放在工作表中,并将Macro1放在模块中。 该文件是.xlsm,运行其他宏没有任何问题,所以我不知道为什么它不起作用。我的猜测是我的名称可能做错了,所以这是名称:

All Sheets with names

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我更改了:

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_之后不必添加工作表的名称 因为代码存储在工作表中,所以不需要告诉它在哪里做东西,因为它不在模块中