表 – Worksheet_Change多次触发

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

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”)replace空白标题。 这似乎导致工作表更改事件多次运行。 我想找出一种方法来让这个事件只运行一次,当用户清除一个标题。

任何帮助是极大的赞赏。

最简单的解决方法是在事件开始处添加一个断言,该断言检查目标单元是否已经包含缺省列名称。

我会用一个简单的iflike语句来做到这一点,当一个标题以“Column”开始并使用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 

这个代码是公认的未经testing,但它应该为您提供一个良好的基础从开始。