2016-06-28 8 views
2

私は、一意の値の数を返し、範囲が選択されたときにExcelのステータスバーに表示する小さなマクロを作成しました。これは、ドキュメントレベルで正常に動作します。ただし、アプリケーションレベルで実行しようとすると、SelectionChangeイベントは起動しません。以下は私が持っているものです。アプリケーションレベルのSelectionChangeイベントが機能しないのはなぜですか?

クラスモジュール 'ExcelEventCapture'

Option Explicit 

Public WithEvents ExcelApp As Application 

Private Sub ExcelApp_SelectionChange(ByVal Target As Range) 
    If TypeName(Target) = "Range" Then 
     Application.StatusBar = "Unique Count: " & CountUnique(Target) 
    End If 
End Sub 

Private Function CountUnique(rng As Range) As Long 
     Dim dict As Dictionary 
     Dim cell As Range 
     Set dict = New Dictionary 
     For Each cell In rng.Cells 
      If cell.Value2 <> 0 Then 
       If Not dict.Exists(cell.Value) Then 
        dict.Add cell.Value, 0 
       End If 
      End If 
     Next 
     CountUnique = dict.Count 
End Function 

はThisWorkbook

Option Explicit 

Dim myobject As New ExcelEventCapture 

Sub Workbook_Open() 
    Set myobject.ExcelApp = Application 
End Sub 

私は何をしないのですか?ありがとう

答えて

3

SelectionChangeイベントはApplicationクラスに存在しません。

SheetSelectionChangeイベントを使用することができ、Targetクラス名を確認する必要はありません。

Private Sub ExcelApp_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)  
    Application.StatusBar = "Unique Count: " & CountUnique(Target) 
End Sub