说,我有一个程序,根据选择变化改变单元格的随机颜色。我知道我可以在工作表SelectionChange
事件的过程中编写代码。
我想我会问,就像我们可以使用addEventListeners
的javascript一样,我们可以在Excel VBA中做类似的事情。
我想知道的是,这可以动态完成吗?即当用户选择一个选项时,然后我将一个过程绑定到工作表的事件SelectionChange
。
注意,我知道我可以声明一个全局布尔值&用它来确定用户行为&在我的SelectionChange
事件过程中使用它。
我只是好奇是否在Excel VBA中,我们可以动态地将程序附加到事件?
答案 0 :(得分:2)
您无法动态分配事件处理程序。 Excel将始终调用内置事件处理程序(SelectionChange
,Calculate
等),并且无法替换您自己的事件处理程序。您可以使用Worksheet
关键字创建自己的WithEvents
变量,然后在时选择开始接收事件。例如,从您的一个工作表中的这个结构开始:
Dim WithEvents MySheet As Worksheet
Private Sub MySheet_SelectionChange(ByVal Target As Range)
Debug.Print "Receiving events"
End Sub
只要MySheet
未绑定到活动工作表,您就不会收到任何事件。当您准备开始时,请调用自定义子例程来执行分配:
Public Sub DoIt()
Set MySheet = Sheet1
End Sub