将代码添加到新的Excel工作簿的加载项

我正在尝试更改我的加载项,以便在打开新的工作簿时打开一个新工作表,然后在该工作表中创build一个新的事件过程。

我已经到了可以使用macrosbutton组合的“Sheets.Add”和“.CreateEventProc”的地步,但是在尝试使用加载项的 Workbook来自动执行该过程时出现了问题。 首先加载项加载,因此“Set VBProj = ActiveWorkbook.VBProject”找不到新的活动工作簿。

是否有可能做到这一点? 如果是这样,是否有需要的工作,或者我只是错过了明显的东西?

这是我目前所拥有的:

Option Explicit Private WithEvents App As Excel.Application Private Sub Workbook_Open() Set App = Excel.Application End Sub Private Sub App_NewWorkbook(ByVal Wb As Workbook) Range("T2").Value = 100 ActiveWorkbook.Sheets.Add Call CreateEventProcedure End Sub Public Sub CreateEventProcedure() Dim VBProj As VBIDE.VBProject Dim VBComp As VBIDE.VBComponent Dim CodeMod As VBIDE.CodeModule Dim NumLines As Long Dim LineNum As Long Dim ProcName As String Dim ProcKind As VBIDE.vbext_ProcKind Const DQUOTE = """" ' one " character Set VBProj = ActiveWorkbook.VBProject Set VBComp = VBProj.VBComponents("Sheet2") Set CodeMod = VBComp.CodeModule With CodeMod LineNum = .CountOfDeclarationLines + 1 Do Until LineNum >= .CountOfLines Or ProcName = "Worksheet_Change" ProcName = .ProcOfLine(LineNum, ProcKind) LineNum = .ProcStartLine(ProcName, ProcKind) + _ .ProcCountLines(ProcName, ProcKind) + 1 Loop If ProcName = "Worksheet_Change" GoTo Exi End If 'Now, create a Change Event on Sheet2 LineNum = .CreateEventProc("Change", "Worksheet") 

对于那些关心的人,我得到了一个小小的并发症的过程。 以下是我所做的:

 Option Explicit Private WithEvents ExApp As Excel.Application Public Sub ExApp_WorkbookOpen(ByVal Wb As Workbook) Dim StrPrompt As String Dim strTitle As String Dim iRet As Integer StrPrompt = "Want to create event?" strTitle = "Event?" On Error GoTo 0 iRet = MsgBox(StrPrompt, vbYesNo, strTitle) If iRet = vbYes Then ActiveWorkbook.Sheets.Add Call CreateEventProcedure End If On Error GoTo 0 ActiveWorkbook.Sheets.Add Call CreateEventProcedure End If End Sub Private Sub Workbook_Open() Set ExApp = Excel.Application End Sub 

我创build了是/否提示绕过第一个“运行时_Global”错误,然后实际加载Excel工作簿,提示再次问我,然后我点击是,一切工作正常。 而且,这只适用于在excel中打开工作簿时所需的一个提示。