2016-12-14 21 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回だけ実行させる方法を理解したいと思います。

ご協力いただきまして誠にありがとうございます。

答えて

1

これの最も簡単な回避策は、ターゲットセルに既定の列名が含まれていないことを確認するアサーションをイベントの先頭に追加することです。

単純なiflikeのステートメントは、見出しが「列」で始まるときにキャッチし、Exit Subを使用してイベントを終了します。 1つの単純なコード行でこれをすべて実行できます。何かのように...

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 

このコードは確かにテストされていませんが、それはあなたには良い出発点を提供するはずです。

関連する問題