2016-06-28 16 views
2

Ich habe ein kleines Makro erstellt, um die Anzahl der eindeutigen Werte zurückzugeben und es in der Statusleiste von Excel anzuzeigen, wenn ein Bereich ausgewählt ist. Dies funktioniert auf Dokumentebene. Das Ereignis SelectionChange wird jedoch nicht gestartet, wenn ich versuche, es auf Anwendungsebene auszuführen. Folgendes habe ich.Warum funktioniert das SelectionChange-Ereignis auf Anwendungsebene nicht?

Klassenmodul '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 

Diesearbeitsmappe

Option Explicit 

Dim myobject As New ExcelEventCapture 

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

Was bin ich? Danke

Antwort

3

SelectionChange Ereignis existiert nicht in Application Klasse.

Sie können SheetSelectionChange Ereignis verwenden und es ist nicht erforderlich, Target Klassenname zu überprüfen.

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