Надстройка, которая добавляет код в новые книги Excel

Я пытаюсь изменить мою надстройку, чтобы она, открыв новую книгу, откроет новый лист и создаст новую процедуру обработки событий в этом новом листе.

Я дошел до того, что могу использовать «Sheets.Add» и «.CreateEventProc», используя комбинацию макрокоманд, но проблема возникает при попытке использовать рабочую книгу надстройки для автоматизации процесса. Надстройки загружаются сначала, поэтому «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 

Я создал приглашение «Да / Нет» для обхода первой ошибки «run-time _Global», а затем рабочая книга excel загружается, подсказка спрашивает меня снова, затем я нажимаю «да», и все работает нормально. Кроме того, это работает только с одним приглашением, необходимым при открытии книг, когда уже в excel.

Давайте будем гением компьютера.