从模块中为另一个WB添加事件

这个问题可能已经被回答了,但我似乎找不到我正在寻找的答案。 我正在创build一个模块,当它被调用时会创build一个新的工作簿并将信息从这个工作簿传输到新的工作簿。 我想使用这个macros添加一个新的工作簿,但没有运气。 目前我有以下几点:

Public Sub TemplateCreate() Dim NewBook as Workbook set NewBook = addnew End Sub Function Addnew() as Object Application.SheetsInNewWorkbook = 2 Application.EnableEvents = True Set AddNew = Workbooks.Add With AddNew .SaveAs Filename:="test.xls" End With End function 

上面的代码工作得很好,但是当添加昏暗的事件作为工作簿Newbook我收到一个错误:只在对象模块有效。 有一个类似的代码行,使其工作的模块?

我试图添加下面的事件function,没有运气使其工作:

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'Tried changing between target and thisWB If thisWB.Sheets("sheet1").Cells.Count = 1 And IsEmpty(thisWB.Sheets("sheet1")) Then thisWB.Sheets("sheet1").Interior.Color = vbBlue End Sub 

感谢您的帮助!

这是一个简单的例子:

在名为“clsWB”的Class模块中:

 Option Explicit Private WithEvents m_wb As Workbook Public Property Set Workbook(wb As Workbook) Set m_wb = wb End Property 'EDIT: added Getter for workbook Public Property Get Workbook() As Workbook Set Workbook = m_wb End Property Private Sub m_wb_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) MsgBox "You selected " & Target.Address() & " on '" & Sh.Name & "'" '... or however you want to respond to the trapped event End Sub 'EDIT2: trap sheet changes Private Sub m_wb_SheetChange(ByVal Sh As Object, ByVal Target As Range) MsgBox "You changed " & Target.Address() & _ " to " & Target.Value & _ " on '" & Sh.Name & "'" '... or however you want to respond to the trapped event End Sub 

在一个常规模块中:

 Option Explicit Dim oWb As New clsWB Sub Tester() Dim AddNew As Workbook, ns As Long ns = Application.SheetsInNewWorkbook 'save default Application.SheetsInNewWorkbook = 2 Set AddNew = Workbooks.Add() Application.SheetsInNewWorkbook = ns 'restore previous default AddNew.SaveAs Filename:="test.xls" Application.EnableEvents = True 'make sure events are enabled Set oWb.Workbook = AddNew 'EDIT: set value in workbook oWb.Workbook.Sheets("sheet2").Cells(x,y).Value = "Test" End Sub