2016-12-14 77 views
2

我试图在用户清除表标题时捕获工作表更改事件。表 - 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会自动替换默认的标题名称(例如“列1”)的空白标题。这似乎导致工作表更改事件多次运行。我想找出一种方法来让这个事件只在用户清除标题时运行一次。

任何帮助,非常感谢。

回答

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 

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