Excel 如何在单元格值更改时运行宏

Excel 如何在单元格值更改时运行宏,excel,vba,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.Enabl

我创建了一个宏,它根据一个单元格值进行过滤,效果很好

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
这个版本应该只执行代码而不调用宏。我将工作表uxxxxx更改为工作表名称,并尝试了其他方法

我还尝试:

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
我将所有私有子宏放在工作表上,宏1放在一个模块中。 这个文件是.xlsm,在运行其他宏时没有任何问题,所以我不知道为什么它不工作。我猜我可能是把名字弄错了,下面是我的名字:

试试这个:

    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
我改变了:

Private Sub Worksheet_Arbeitstabelle(ByVal Target As Range)
致:

@Siddharth Rout将我链接到:

此处说明,无需在
工作表

因为代码存储在工作表中,所以无需告诉它在何处执行操作,因为它不在模块中

可能与我在问题中提到的@FunThomas重复,我将代码放在何处,它不在模块中modul@SiddharthRout谢谢,我读了答案,把工作表改成了工作表,现在开始工作了,谢谢但是我找到了另一个建议solution@CedricIntersect函数实际上更可取。如果更改的范围与一个或多个范围相对应,则可以运行宏。考虑更改<代码>目标、地址…< /代码>行。
Private Sub Worksheet_Change(ByVal Target As Range)