2012-05-05 161 views
1

我只想在所有工作簿中捕獲打開和保存事件(帶有或不帶有宏)。 據我所知我需要添加事件啓用代碼。我在互聯網上發現了很多例子。我學到了stackoverflow的例子,像這裏:How can an Excel Add-In respond to events in any worksheet? 但它只是不起作用。沒有人報告任何問題。所以,我認爲我在這裏有一個簡單的錯誤。 我有下一個加載項,例如:VBA插件:事件不起作用

類模塊(ExcelEventCapture) - 私人:

Option Explicit 
Public WithEvents ExcelApp As Excel.Application 

Private Sub Class_Initialize() 
Set ExcelApp = New Excel.Application 
ExcelApp.EnableEvents = True 
MsgBox "ExcelApp OK" 
End Sub 

Private Sub ExcelApp_NewWorkbook(ByVal Wb As Workbook) 
Wb.Close savechanges:=False 
MsgBox "Sorry - you can't create workbooks in this system!" 
End Sub 

此代碼放置在的ThisWorkbook:

Option Explicit 
Private ExcelEvents As ExcelEventCapture 
Private Sub Workbook_Open() 
Set ExcelEvents = New ExcelEventCapture 
MsgBox "ExcelEvents OK" 
End Sub 

每次之後保存/修改此代碼我使用加載項管理器來關閉/打開此插件。打開後,我看到「ExcelApp OK」,「ExcelEvents OK」。但是當我創建新的工作簿時,不會發生事件。其他事件也沒有處理。我用2007/2010 Excel試用它。結果相同。 請幫忙。

+2

我不能完全肯定,但你爲什麼要實例化一個「新Excel應用程序」而不是'Set ExcelApp = Excel.Application'。另外,你可以在Auto_Open()中實例化AddIn本身的類。 – ExternalUse

回答

2

您的代碼是不完全正確:

類模塊(ExcelEventCapture)

Option Explicit 

Public WithEvents ExcelApp As Application 

Private Sub ExcelApp_NewWorkbook(ByVal Wb As Workbook) 
    Wb.Close savechanges:=False 
    MsgBox "Sorry - you can't create workbooks in this system!" 
End Sub 

這段代碼放在的ThisWorkbook:

Option Explicit 

Private ExcelEvents As New ExcelEventCapture 

Private Sub Workbook_Open() 
    Set ExcelEvents.ExcelApp = Application 
    MsgBox "ExcelEvents OK" 
End Sub 
+0

致Chris Neilsen:謝謝你的回答。我在這裏寫下了你的文字。我還評論了Class_Initialize方法(它是正確的?)。我見過「ExcelEvents OK」。但事件仍然不起作用。 – user1377417

+0

我已經運行發佈的代碼,它確實對我有用。 'Class_Initialise'中的代碼不是必需的。在Excel 2010上測試 –

+0

對不起,我有一個錯誤:ExcelEvents.ExcelApp = new Application。當「新」被刪除時,所有的東西都變得有效了。這不是錯字。我真的不明白我在做什麼。非常感謝您的幫助。 – user1377417