由程式呼叫並執行 Office 的巨集

有朋友在問,下面文章所說的功能
我特別把 MSDN 大部份對於開啟文章-->執行巨集
的內文複製過來
如有興趣的,也請直接連回 MSDN


建立包含巨集的 Office 文件
  1. 建立名為 C:\Doc1.doc 的 Word 文件。要這麼做,請您執行下列步驟:
    1. 在 Word 中, 建立新文件。
    2. 按下 ALT + F11 開啟 Visual Basic 編輯器。
    3. 在 插入] 功能表上按一下 [模組]。
    4. 下列的巨集程式碼貼入新模組:
      'Display a message box that displays the application name.
      Public Sub DoKbTest()
         MsgBox "Hello from " & Application.Name
      End Sub
      
      'Display a message box with the string passed from the
      'Automation client.
      Public Sub DoKbTestWithParameter( sMsg As String )
         MsgBox sMsg
      End Sub
    5. 關閉 [Visual Basic 編輯程式、 儲存在 Word 文件,並結束 Word。
  2. 建立 Excel 活頁簿名稱 C:\Book1.xls 為使用步驟類似於那些您用來建立 Word 文件。
  3. 建立 PowerPoint 簡報名 C:\Pres1.ppt 為使用步驟類似於那些您用來建立 [Word 文件。
  4. 建立新的 Access 資料庫,名為 C:\Db1.mdb。要這麼做,請您執行下列步驟:
    1. 在 插入] 功能表上按一下 [模組]。
    2. 巨集程式碼貼入新的模組中。
    3. 儲存模組,並結束 Access。

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

  1. 啟動 Microsoft Visual Studio.NET。在 [檔案] 功能表上按一下 [新增],然後按一下 [專案]。選取 [從 Visual Basic 專案類型的 [Windows 應用程式]。預設會建立 Form1。
  2. 加入存取、 Excel、 PowerPoint 及 Word 物件程式庫的參考。要這麼做,請您執行下列步驟:
    1. 在 [專案] 功能表上按一下 [加入參考]。
    2. 在 [COM] 索引標籤上找到 Microsoft Word 10.0 物件程式庫或 Microsoft Word 11.0 物件程式庫,然後按一下 [選取]。

      附註如果您使用 Microsoft Office XP,而且您已經不這樣做,Microsoft 建議您下載並安裝組 [Microsoft Office XP 主要 Interop 件 (PIA)。 如需有關 Office XP PIA,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
      328912  Microsoft Office XP 主要 Interop 組件 (PIA) 是可供下載
    3. 重複先前步驟中,存取、 Excel 及 PowerPoint 物件程式庫的。
    4. 按一下 [[確定] 在 [加入參考] 對話方塊以接受您的選擇。如果接到提示,以產生您所選取的程式庫的包裝函式時,按一下 [是]

      附註如果參照 [存取] 時收到錯誤訊息 10.0 物件程式庫,請參閱 < 疑難排解 > 一節。
  3. 按一下 [檢視] 功能表 工具箱。將下拉式方塊和按鈕加入至 Form1。
  4. 連按兩下 [Button1] 來產生一個定義為按鈕的 Click 事件處理常式。
  5. 下列程式碼貼 Button1_Click 程序中:
    Select Case ComboBox1.SelectedItem
    
        Case "Access"
    
            Dim oAccess As Access.ApplicationClass
    
            'Start Access and open the database.
            oAccess = CreateObject("Access.Application")
            oAccess.Visible = True
            oAccess.OpenCurrentDatabase("c:\db1.mdb", False)
    
            'Run the macros.
            oAccess.Run ("DoKbTest")
            oAccess.Run("DoKbTestWithParameter", "Hello from VB .NET Client")
    
            'Clean-up: Quit Access without saving changes to the database.
            oAccess.DoCmd().Quit (Access.AcQuitOption.acQuitSaveNone)
            System.Runtime.InteropServices.Marshal.ReleaseComObject (oAccess)
            oAccess = Nothing
    
        Case "Excel"
    
            Dim oExcel As Excel.ApplicationClass
            Dim oBook As Excel.WorkbookClass
            Dim oBooks As Excel.Workbooks
    
            'Start Excel and open the workbook.
            oExcel = CreateObject("Excel.Application")
            oExcel.Visible = True
            oBooks = oExcel.Workbooks
            oBook = oBooks.Open("c:\book1.xls")
    
            'Run the macros.
            oExcel.Run ("DoKbTest")
            oExcel.Run("DoKbTestWithParameter", "Hello from VB .NET Client")
    
            'Clean-up: Close the workbook and quit Excel.
            oBook.Close (False)
            System.Runtime.InteropServices.Marshal.ReleaseComObject (oBook)
            oBook = Nothing
            System.Runtime.InteropServices.Marshal.ReleaseComObject (oBooks)
            oBooks = Nothing
            oExcel.Quit()
            System.Runtime.InteropServices.Marshal.ReleaseComObject (oExcel)
            oExcel = Nothing
    
        Case "PowerPoint"
    
            Dim oPP As PowerPoint.ApplicationClass
            Dim oPresSet As PowerPoint.Presentations
            Dim oPres As PowerPoint.PresentationClass
    
            'Start PowerPoint and open the presentation.
            oPP = CreateObject("PowerPoint.Application")
            oPP.Visible = True
            oPresSet = oPP.Presentations
            oPres = oPresSet.Open("c:\pres1.ppt", , , True)
    
            'Run the macros.
            oPP.Run ("'pres1.ppt'!DoKbTest")
            oPP.Run("'pres1.ppt'!DoKbTestWithParameter", "Hello from VB .NET Client")
    
            'Clean-up: Close the presentation and quit PowerPoint.
            oPres.Close()
            System.Runtime.InteropServices.Marshal.ReleaseComObject (oPres)
            oPres = Nothing
            System.Runtime.InteropServices.Marshal.ReleaseComObject (oPresSet)
            oPresSet = Nothing
            oPP.Quit()
            System.Runtime.InteropServices.Marshal.ReleaseComObject (oPP)
            oPP = Nothing
    
        Case "Word"
    
            Dim oWord As Word.ApplicationClass
    
            'Start Word and open the document.
            oWord = CreateObject("Word.Application")
            oWord.Visible = True
            oWord.Documents.Open ("C:\Doc1.doc")
    
            'Run the macros.
            oWord.Run ("DoKbTest")
            oWord.Run("DoKbTestWithParameter", "Hello from VB .NET Client")
    
            'Quit Word.
            oWord.Quit()
            System.Runtime.InteropServices.Marshal.ReleaseComObject (oWord)
            oWord = Nothing
    
    End Select
    
    GC.Collect() 
  6. 在 [檢視] 功能表上按一下 [設計工具],然後連按兩下 Form1 來產生表單的 Load 事件的定義。
  7. 下列程式碼貼 Form1_Load 程序中:
    ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
            Dim a As String() = {"Access", "Excel", "PowerPoint", "Word"}
            ComboBox1.Items.AddRange(a)
            ComboBox1.SelectedIndex = 0
         
  8. 將下列程式碼加入至 Form1.vb 的頂端:
    Imports Access = Microsoft.Office.Interop.Access
    Imports Excel = Microsoft.Office.Interop.Excel
    Imports Word = Microsoft.Office.Interop.Word
    Imports PowerPoint = Microsoft.Office.Interop.PowerPoint
         

執行並測試自動化用戶端

  1. 按下 F5 以執行應用程式。
  2. 從 ComboBox1,選取 Office 應用程式,然後再按一下 [Button1]。您所選取之 Office 應用程式啟動,而且 DoKBTest 及 DoKBTestWithParameter 的巨集能夠被執行。

沒有留言:

張貼留言