如何: 使用 Visual Basic.NET,Excel 處理事件

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:302814
本文已封存。本文係以「現狀」提供且不會再更新。
本文章的有 Microsoft C#.NET] 版本請參閱 302815
本文章的有 Microsoft Visual C++.NET] 版本請參閱 309301
本文章的有 Microsoft Visual Basic 6.0] 版本請參閱 219151

在此工作

結論
本文將逐步告訴您,如何處理 Excel 中以 Visual Basic.NET 開發的自動化用戶端的事件。

back to the top

事件處理的概觀

您可以建構事件處理常式使用 Visual Basic.NET 下列的兩種方式,視您要將事件處理常式與事件相關聯的方式:
  • 標準的方式來建立事件處理常式是使用 Handles 關鍵字使用 WithEvents 關鍵字。當您使用 WithEvents 關鍵字來宣告變數時,Visual Basic.NET 自動連接到該物件的事件在執行階段。處理特定的事件,該物件的使用 Visual Studio.NET 的 [類別] 和 [方法] 清單來新增相關的處理常式時您的環境是在 [程式碼] 檢視中。-或者-

  • 使用 AddHandler] 關鍵字 Visual Basic.NET 會提供第二個方法來處理事件。AddHandlerRemoveHandler 可以讓您開始並以動態方式停止特定事件的事件處理。
back to the top

建立 Visual Basic.NET 自動化用戶端

下列步驟將告訴您,如何使用任一種方法來處理來自以 Visual Basic.NET 開發的自動化用戶端的 Excel 事件。
  1. 啟動 Microsoft Visual Studio.NET。在 [檔案] 功能表上按一下 [新增],然後按一下 [專案]。在 Visual Basic 專案 下, 選取 [Windows 應用程式]。預設會建立 Form1。
  2. 將參考加入至 Microsoft Excel 物件程式庫。要這麼做,請您執行下列步驟:
    1. 在 [專案] 功能表上按一下 [加入參考]。
    2. 在 [COM] 索引標籤,找出 Microsoft Excel 10.0 物件程式庫,然後按一下 [注意: 如果您已經不這樣,Microsoft 建議您下載並安裝組 [Microsoft Office XP 主要 Interop 件 (PIA)。 取得更多資訊有關 Office XP PIA 按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
      328912資訊: Microsoft Office XP PIA 可供下載
    3. 按一下 [[確定] 在 [加入參考] 對話方塊以接受您的選擇。如果接到提示,以產生您所選取的程式庫的包裝函式時,按一下 [是]
  3. 在 [專案] 功能表上, 選取 [加入模組]。選取的範本清單中的 模組,然後按一下 [開啟]。將下列程式碼貼入新的模組中:
       '==================================================================   'Demonstrates Using a Delegate for Event Handling   '==================================================================   Private xlApp As Excel.Application   Private xlBook As Excel.Workbook   Private xlSheet1 As Excel.Worksheet   Private xlSheet2 As Excel.Worksheet   Private xlSheet3 As Excel.Worksheet   Private EventDel_BeforeBookClose As Excel.AppEvents_WorkbookBeforeCloseEventHandler   Private EventDel_CellsChange As Excel.DocEvents_ChangeEventHandler   Public Sub UseDelegate()      'Start Excel and create a new workbook.      xlApp = CreateObject("Excel.Application")      xlBook = xlApp.Workbooks.Add()      xlBook.Windows(1).Caption = "Uses WithEvents"      'Get references to the three worksheets.      xlSheet1 = xlBook.Worksheets.Item(1)      xlSheet2 = xlBook.Worksheets.Item(2)      xlSheet3 = xlBook.Worksheets.Item(3)      CType(xlSheet1, Excel._Worksheet).Activate()      'Add an event handler for the WorkbookBeforeClose Event of the      'Application object.      EventDel_BeforeBookClose = New Excel.AppEvents_WorkbookBeforeCloseEventHandler( _            AddressOf BeforeBookClose)      AddHandler xlApp.WorkbookBeforeClose, EventDel_BeforeBookClose      'Add an event handler for the Change event of both Worksheet       'objects.      EventDel_CellsChange = New Excel.DocEvents_ChangeEventHandler( _            AddressOf CellsChange)      AddHandler xlSheet1.Change, EventDel_CellsChange      AddHandler xlSheet2.Change, EventDel_CellsChange      AddHandler xlSheet3.Change, EventDel_CellsChange      'Make Excel visible and give the user control.      xlApp.Visible = True      xlApp.UserControl = True   End Sub   Private Sub CellsChange(ByVal Target As Excel.Range)      'This is called when a cell or cells on a worksheet are changed.      Debug.WriteLine("Delegate: You Changed Cells " + Target.Address + " on " + _                        Target.Worksheet.Name())   End Sub   Private Sub BeforeBookClose(ByVal Wb As Excel.Workbook, ByRef Cancel As Boolean)      'This is called when you choose to close the workbook in Excel.      'The event handlers are removed, and then the workbook is closed       'without saving changes.      Debug.WriteLine("Delegate: Closing the workbook and removing event handlers.")      RemoveHandler xlSheet1.Change, EventDel_CellsChange      RemoveHandler xlSheet2.Change, EventDel_CellsChange      RemoveHandler xlSheet3.Change, EventDel_CellsChange      RemoveHandler xlApp.WorkbookBeforeClose, EventDel_BeforeBookClose      Wb.Saved = True 'Set the dirty flag to true so there is no prompt to save.   End Sub					
  4. 將另一個模組新增到該專案,然後貼上下列程式碼模組中:
       '==================================================================   'Demonstrates Using WithEvents for Event Handling   '==================================================================   Private WithEvents xlApp As Excel.Application   Private xlBook As Excel.Workbook   Private WithEvents xlSheet1 As Excel.Worksheet   Private WithEvents xlSheet2 As Excel.Worksheet   Private WithEvents xlSheet3 As Excel.Worksheet   Public Sub UseWithEvents()      'Start Excel and create a new workbook.      xlApp = CreateObject("Excel.Application")      xlBook = xlApp.Workbooks.Add()      xlBook.Windows(1).Caption = "Uses WithEvents"      'Get references to the three worksheets.      xlSheet1 = xlBook.Worksheets.Item(1)      xlSheet2 = xlBook.Worksheets.Item(2)      xlSheet3 = xlBook.Worksheets.Item(3)      CType(xlSheet1, Excel._Worksheet).Activate()      'Make Excel visible and give the user control.      xlApp.Visible = True      xlApp.UserControl = True   End Sub   Private Sub xlApp_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, _     ByRef Cancel As Boolean) Handles xlApp.WorkbookBeforeClose      Debug.WriteLine("WithEvents: Closing the workbook.")      Wb.Saved = True 'Set the dirty flag to true so there is no prompt to save   End Sub   Private Sub xlSheet1_Change(ByVal Target As Excel.Range) Handles xlSheet1.Change      Debug.WriteLine("WithEvents: You Changed Cells " + Target.Address + " on Sheet1")   End Sub   Private Sub xlSheet2_Change(ByVal Target As Excel.Range) Handles xlSheet2.Change      Debug.WriteLine("WithEvents: You Changed Cells " + Target.Address + " on Sheet2")   End Sub					
  5. 將下列程式碼加入至 Module1.vb 頂端:
    Imports Microsoft.Office.Interop					
  6. 將下列程式碼加入至 Module2.vb 頂端:
    Imports Microsoft.Office.Interop					
  7. 在 [方案總管中按兩下 [Form1.vb],以在 [設計] 檢視中顯示表單]。
  8. 在 [檢視] 功能表上選擇 [工具箱],以顯示 [工具箱],然後再將兩個按鈕加入至 Form1。將 Button1] 的 [文字] 屬性變更為 使用 WithEvents,並 使用委派 來變更 Button2] 的 [文字] 屬性。
  9. 在 [檢視] 功能表中上, 選取 [以顯示表單的 [程式碼] 視窗的 程式碼]。將下列程式碼加入 Click 事件處理常式,該按鈕:
        Private Sub Button1_Click(ByVal sender As System.Object, _      ByVal e As System.EventArgs) Handles Button1.Click        UseWithEvents()    End Sub    Private Sub Button2_Click(ByVal sender As System.Object, _      ByVal e As System.EventArgs) Handles Button2.Click        UseDelegate()    End Sub					
back to the top

測試程式碼

  1. 按下 CTRL + ALT + O 以顯示 [輸出] 視窗。
  2. 按下 F5 以建置並執行程式。
  3. 在表單上按一下 [使用 WithEvents。程式啟動 Excel,並且會建立具有三張工作表的活頁簿。
  4. 將任何資料新增到一或多個工作表上的儲存格。在每個變更之後,按下 ENTER 鍵。請檢查以確認稱為事件處理常式的 Visual Studio 中的 [輸出] 視窗。
  5. 請結束 Excel。
  6. 在表單上按一下 [使用代理人。再次,程式啟動 Excel,並建立具有多個工作表的活頁簿。
  7. 將任何資料新增到一或多個工作表上的儲存格。在每個變更之後,按下 ENTER 鍵。請檢查以確認稱為事件處理常式的 Visual Studio 中的 [輸出] 視窗。
  8. 請結束 Excel,然後關閉表單,以結束偵錯工作階段。
back to the top

疑難排解

當您測試程式碼時,可能會收到下列錯誤訊息:
型別中 interop.excel.dll 'System.InvalidCastException' 發生未處理的例外狀況

其他資訊: 沒有這種支援的介面
如果您收到這個錯誤訊息,請參閱下列文件 「 Microsoft 知識庫 」 中:
316653PRB: 錯誤使用 WithEvents 或委派來處理從 Microsoft Excel 在 Visual Studio.NET 中的事件
back to the top
参考
如需詳細資訊,請參閱下列 Microsoft 開發人員網路 MSDN 網站:
與 Visual Studio 的 Microsoft Office 程式開發
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx
取得更多資訊有關自動化 Excel 從 Visual Basic.NET 按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中 「 文件:
301982HOWTO: 自動化 Microsoft Excel 從 Visual Basic.NET
302094HOWTO: 自動化 Excel 從 Visual Basic.net 填滿或取得使用陣列的範圍中的資料
back to the top

(保留所有的權限 c) Microsoft Corporation 2001。Joel Alley,Microsoft 公司所佔的比重。

警告:本文為自動翻譯

內容

文章識別碼:302814 - 最後檢閱時間:12/06/2015 03:40:40 - 修訂: 6.2

Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Excel 2002 Standard Edition

  • kbnosurvey kbarchive kbmt kbautomation kbhowtomaster KB302814 KbMtzh
意見反應