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 に答える