1

每当在 Excel 工作簿中创建新工作表时,我都会尝试打开一个消息框。我还希望在创建新工作簿时打开一个消息框。到目前为止,我能够像这样完成新的工作簿消息:

我有一个名为 cl_AppEvents 的类模块,其中包含:

Public WithEvents AppEvent As Application
Public WithEvents WB As Workbook
Public WithEvents Sh As Worksheet

Public Sub AppEvent_NewWorkbook(ByVal WB As Workbook)
    MsgBox ("New Workbook")
End Sub

Public Sub WB_NewSheet(ByVal Sh As Object)
    MsgBox ("New Worksheet")
End Sub

这是我初始化应用程序事件的代码:

Dim myAppEvent As New cl_AppEvents
Sub InitializeAppEvent()
    Set myAppEvent.AppEvent = Application
End Sub

我试过做这样的事情:

Public Sub AppEvent_NewWorkbook(ByVal WB As Workbook)
    MsgBox ("New Workbook")
    WB_NewSheet(ByVal Sh As Workbook)
End Sub

但这只会给我一个对象属性错误。那么如何为 NewWorkbook 事件中引用的新工作簿 WB 启用 NewSheet 事件?

4

2 回答 2

1

clsAppEvt:

Public WithEvents AppEvent As Application
Public WbColl As New Collection

Public Sub AppEvent_NewWorkbook(ByVal WB As Workbook)
    Dim oWB As clsWbEvt
    MsgBox ("New Workbook")
    Set oWB = New clsWbEvt
    oWB.Init WB
    WbColl.Add oWB
End Sub

Public Sub Init(app As Application)
    Set Me.AppEvent = app
End Sub

clsWbEvt:

Public WithEvents WB As Workbook

Public Sub WB_NewSheet(ByVal Sh As Object)
    MsgBox ("New Worksheet")
End Sub

Public Sub Init(wbk As Workbook)
    Set Me.WB = wbk
End Sub

常规模块:

Dim oApp As clsAppEvt

Sub Setup()
    Set oApp = New clsAppEvt
    oApp.Init Application
End Sub
于 2013-03-12T16:54:28.230 回答
0

尝试将 Initialize 事件处理程序添加到您的类,并设置 Workbook 对象!

Private Sub Class_Initialize()
    Set WB = Application.ActiveWorkbook
End Sub

Public Sub WB_NewSheet(ByVal Sh As Object)
    MsgBox ("New Worksheet")
End Sub

我用你的代码试过这个,效果很好..

顺便说一句,当然,这仅适用于第一个工作簿,工作表事件不会为新工作簿触发!

HTH 菲利普

于 2013-03-12T16:27:50.030 回答