根据用户操作将事件附加到事件

时间:2015-08-17 09:07:18

标签: excel vba excel-vba vbscript

说,我有一个程序,根据选择变化改变单元格的随机颜色。我知道我可以在工作表SelectionChange事件的过程中编写代码。

我想我会问,就像我们可以使用addEventListeners的javascript一样,我们可以在Excel VBA中做类似的事情。

enter image description here

我想知道的是,这可以动态完成吗?即当用户选择一个选项时,然后我将一个过程绑定到工作表的事件SelectionChange

注意,我知道我可以声明一个全局布尔值&用它来确定用户行为&在我的SelectionChange事件过程中使用它。

我只是好奇是否在Excel VBA中,我们可以动态地将程序附加到事件?

1 个答案:

答案 0 :(得分:2)

您无法动态分配事件处理程序。 Excel将始终调用内置事件处理程序(SelectionChangeCalculate等),并且无法替换您自己的事件处理程序。您可以使用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