vba - 为什么应用程序级别的 SelectionChange 事件不起作用?

标签 vba excel excel-addins

我创建了一个小宏来返回唯一值的数量,并在选择范围时将其显示在 Excel 的状态栏中。这在文档级别工作得很好。但是,当我尝试在应用程序级别运行 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

本工作簿

Option Explicit

Dim myobject As New ExcelEventCapture

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

我错过了什么?谢谢

最佳答案

Application 中不存在

SelectionChange 事件类(class)。

您可以使用SheetSelectionChange事件,无需检查 Target 类名。

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

关于vba - 为什么应用程序级别的 SelectionChange 事件不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38065835/

相关文章:

excel - 如何在 VBA 用户窗体中修复日期 - 日期以不正确的格式输入工作表

c# - COM 加载项与用 C# 编写的自动化加载项的可选参数

vba - 用户窗体中命名范围 (Excel) 的变量给我一个错误

excel - 如何在 IF 语句中使用 AND

excel - 如何返回多单元格命名范围的值

excel - 如何阻止 Excel 破坏我的 VBA 脚本插入的公式

vba - Do Loop 不循环

visual-studio-2010 - VSTO 调试版本正常,安装版本不读取 app.config

c# - 在 C# 中以编程方式启用 Excel 宏

ms-access - 每当在 Access 中重新选择选项卡式表单时运行 VBA 代码