表 - Worksheet_Change多次触发

时间:2016-12-14 01:58:35

标签: excel excel-vba vba

我试图在用户清除表标题时捕获工作表更改事件。

Private Sub Worksheet_Change(ByVal Target As Range)
application.EnableEvents = False    
    If Not Intersect(Target, Me.ListObjects("Table1").HeaderRowRange) Is Nothing Then
        msgbox "Hello"
    end if
application.EnableEvents = True  
End Sub 

如果用户按下"删除"要清除表上的非默认标题名称,Excel会自动使用默认标题名称替换空白标题(例如," Column1")。这似乎导致工作表更改事件多次运行。我想找出一种方法,让用户清除标题时只运行一次此事件。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

最简单的解决方法是在事件开始时添加一个断言,检查目标单元格是否已包含默认列名。

我会使用简单的iflike语句执行此操作,该语句在标题以“列”开头时捕获并使用Exit Sub退出事件。您可以通过一行简单的代码完成所有这些操作。有点像...

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.value Like "Column*" Then Exit Sub
application.EnableEvents = False    
    If Not Intersect(Target, Me.ListObjects("Table1").HeaderRowRange) Is Nothing Then
        msgbox "Hello"
    end if
application.EnableEvents = True  
End Sub 

此代码未经测试,但它应该为您提供良好的基础。