Windows10、VisualStudio2019、VB.NET、.NetFramework4.7.2の環境でエクセルアドインをVSTOで作成しています。
エクセルにあるワークシートを閉じた時にある処理を行う為に以下のようなコードを記述しました。
VB.NET
1 Sub add_handlers_to_worksheet(Worksheet As Excel.Worksheet) 2 AddHandler Worksheet.BeforeDelete, New Excel.DocEvents_BeforeDeleteEventHandler(AddressOf Delete_worksheet) 3 End Sub 4 Sub Delete_worksheet(worksheet As Excel.Worksheets) 5 '(ワークシートクローズ時に行いたい処理1) 6 End Sub
このように記述するとExcel.DocEvents_BeforeDeleteEventHandler(AddressOf Delete_worksheet)の部分でデリゲートとシグネチャに互換性が無いとエラーが出てしまいます。
たしかにDocEvents_BeforeDeleteEventHandler Delegateを見るといかなる引数も取っていない様に見受けられるのでエラーは仕方ないと思うのですがワークシートがクローズした場合にある特定の処理をしたい場合にはどのような方法があるのでしょうか?
ご存知の方おられましたらよろしくお願いします。
解答を元にテストコードを作成
VB.NET
1Imports Microsoft.Office.Interop.Excel 2 3Public Class ThisAddIn 4 Private Sub ThisAddIn_Startup() Handles Me.Startup 5 AddHandler Globals.ThisAddIn.Application.WorkbookActivate, New Excel.AppEvents_WorkbookActivateEventHandler(AddressOf add_handlers_to_book) 6 End Sub 7 8 Private Sub add_handlers_to_book(WB As Workbook) 9 AddHandler WB.SheetBeforeDelete, New Excel.WorkbookEvents_SheetBeforeDeleteEventHandler(AddressOf Workbook_SheetBeforeDelete) 10 End Sub 11 Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object) 12 13 MsgBox(Sh.name) 14 15 End Sub 16End Class
VSTOアドインのプロジェクトを作成、以下のコードをThisAddin.vbに記述、実行の上エクセルシートの削除を行った結果メッセージボックス内に削除したワークシート名が表示されました。
回答2件
あなたの回答
tips
プレビュー