2012-05-05 18 views
1

すべてのブック(マクロありまたはなし)で開くイベントと保存イベントをキャッチしたいだけです。 私が理解しているように、私はEventInが有効なコードでAddInが必要です。私はインターネットで多くの例を見つけました。私はここのようなstackoverflowの例を学んだ:How can an Excel Add-In respond to events in any worksheet? しかし、それは動作しません。誰も問題を報告しません。だから、私はここで簡単な間違いがあると思う。 私は、たとえば、次のアドインを持っている:VBA Addins:イベントが機能しません。

クラスモジュール(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

私は完全に一定ではありませんよ、なぜあなたはSet ExcelApp = Excel.Application'の代わりに "New 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 =新しいアプリケーション。 「新しい」が削除されると、すべてのものが機能しました。これは誤字ではありません。私は本当に私がやっていることを理解していない。どうもありがとうございました。 – user1377417