日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

用VB創(chuàng)建MS Office的COM加載項(xiàng)

 悟靜 2009-07-28
通過此演練,可以用 VB 創(chuàng)建 COM 加載項(xiàng)。COM 加載項(xiàng)可以在不給用戶增加復(fù)雜性的情況下擴(kuò)展應(yīng)用程序的功能。究其實(shí)質(zhì),COM 加載項(xiàng)是一個(gè)動(dòng)態(tài)鏈接庫(kù) (DLL),需要進(jìn)行注冊(cè)才能供 Microsoft? Office XP 應(yīng)用程序加載和使用。
雖然可以將加載項(xiàng)編寫成可執(zhí)行文件 (.exe),但 DLL 通常會(huì)比.exe 文件提供更好的性能。

  此演練將使用 VB 創(chuàng)建并運(yùn)行一個(gè)自定義工具欄 COM 加載項(xiàng)。本主題中的任務(wù)假定您熟悉 Office 應(yīng)用程序、VB 工程,以及調(diào)試和運(yùn)行代碼。

  引言

  創(chuàng)建 COM 加載項(xiàng)時(shí)可以使用任何支持 COM 的語(yǔ)言,如 VBA、Visual Basic 和 Microsoft Visual C++。用 Office Developer 創(chuàng)建的加載項(xiàng)將自動(dòng)打包成 DLL,并由宿主應(yīng)用程序注冊(cè)后進(jìn)行加載??梢詣?chuàng)建一個(gè)加載項(xiàng)但能用于多個(gè)應(yīng)用程序中。有關(guān)詳細(xì)信息。請(qǐng)參閱為多個(gè)應(yīng)用程序創(chuàng)建 COM 加載項(xiàng)。

  此演練將完成一系列步驟,從而用 VB 創(chuàng)建一個(gè) COM 加載項(xiàng)。創(chuàng)建 COM 加載項(xiàng)的基本步驟包括:

  1.配置外接程序設(shè)計(jì)器。

  2.在外接程序設(shè)計(jì)器中編寫代碼。

  3.將命令條控件集成到加載項(xiàng)中。

  4.對(duì) COM 加載項(xiàng)進(jìn)行調(diào)試和測(cè)試。

  5.為 COM 加載項(xiàng)生成 DLL。

  6.解決 COM 加載項(xiàng)的開發(fā)問題。

  配置外接程序設(shè)計(jì)器

  用外接程序設(shè)計(jì)器創(chuàng)建的工程為開發(fā)加載項(xiàng)提供工作區(qū)域。使用外接程序設(shè)計(jì)器可以創(chuàng)建用于 VBA 或任何 Office 應(yīng)用程序的 COM 加載項(xiàng)。工程中的每個(gè)外接程序設(shè)計(jì)器都表示一個(gè)單獨(dú)的、只能在一種 Office 應(yīng)用程序中運(yùn)行的加載項(xiàng)。
創(chuàng)建的 DLL 可包含多個(gè)加載項(xiàng),它們使用相同的窗體、模塊和類模塊,但面向的卻是不同的應(yīng)用程序。此演練使用 Excel 作為宿主 Office 應(yīng)用程序。

  如果希望加載項(xiàng)可供多個(gè)應(yīng)用程序使用,就必須為每個(gè)宿主應(yīng)用程序各自添加一個(gè)外接程序設(shè)計(jì)器??梢酝ㄟ^模塊共享代碼;但在每個(gè)工程中,必須引用每個(gè)宿主應(yīng)用程序所特定的對(duì)象模型。


  配置外接程序設(shè)計(jì)器

  1.打開 VB

  2.在“文件”菜單中,選擇“新建工程”,然后選擇“外接程序”。

  3.把窗體移除,雙擊設(shè)計(jì)器中的Connect。

  3.在“外接程序顯示名稱”文本框中鍵入名稱 Greeting Toolbar,在“外接程序描述”文本框中鍵入說明 Toolbar add-in that launches a Hello World message in Excel。
 
  4.從“應(yīng)用程序”列表中選擇 Microsoft Excel。

  5.從“應(yīng)用程序版本”列表中選擇 Microsoft Excel 10.0。

  6.從“初始化加載行為”列表中選擇 "Startup"。有關(guān)各種不同類型初始加載行為的詳細(xì)信息,請(qǐng)參閱指定加載行為。

  此主題相關(guān)圖片如下:

用VB創(chuàng)建MS Office的COM加載項(xiàng)

  7.在“工程”菜單中,選擇“引用”,確保讓工程引用下列類型庫(kù)。(該引用列表是此演練所必需的。對(duì)于您的加載項(xiàng),要確保選擇每個(gè)可以使用加載項(xiàng)的 Office 應(yīng)用程序所需的類型庫(kù)。)

●Visual Basic for Applications
●OLE Automation
●Microsoft Add-in Designer
●Microsoft Office 10.0 Object Library
●Microsoft Excel 10.0 Object Library

  8.在“文件”菜單中選擇“保存 Connect”。

  9.在“工程另存為”對(duì)話框中,輸入名稱 Greetings.Dsr,選擇要將其保存到的文件夾,然后單擊“保存”。

  在外接程序設(shè)計(jì)器中編寫代碼

  在創(chuàng)建工程并為外接程序設(shè)計(jì)器賦值后,可以添加代碼將加載項(xiàng)與宿主應(yīng)用程序連接起來。此演練將向您展示將加載項(xiàng)與宿主應(yīng)用程序連接起來所需的典型過程和事件。IDTExtensibility2 接口提供連接這二者所需的 COM 對(duì)象和事件。
然后,加載項(xiàng)可以使用宿主應(yīng)用程序所展示的對(duì)象模型與宿主應(yīng)用程序接合??梢栽趯?duì)象瀏覽器中查看特定應(yīng)用程序的對(duì)象模型。

  外接程序設(shè)計(jì)器中的代碼可處理加載項(xiàng)與宿主應(yīng)用程序的集成。例如,加載或卸載加載項(xiàng)時(shí)運(yùn)行的代碼駐留在“外接程序設(shè)計(jì)器”的模塊中。如果加載項(xiàng)中包含窗體,則外接程序設(shè)計(jì)器還可以包含用于顯示窗體的代碼。

  聲明變量和設(shè)置過程存根

  1.在“工程資源管理器”窗口中,選擇 Connect,然后打開“視圖”菜單,單擊“代碼”。清除原來有的代碼。

  2.在“通用聲明”部分,引用可擴(kuò)展性接口。

Implements IDTExtensibility2

  3.添加用于在加載項(xiàng)和宿主之間提供通訊的模塊級(jí)變量。只要加載了 COM 加載項(xiàng),賦值為 As Excel.Application 的變量就一直存在,因此,所有過程都可以確定加載項(xiàng)當(dāng)前正在哪個(gè)應(yīng)用程序中運(yùn)行。因?yàn)?WithEvents 關(guān)鍵字指派給 cbbButton 變量,所以菜單項(xiàng)的 Click 事件過程將在用戶單擊新菜單項(xiàng)時(shí)觸發(fā)。


'Global object references
Public appHostApp As Excel.Application
Private WithEvents cbbButton As Office.CommandBarButton
  4.在“代碼”窗口中,從“對(duì)象”列表中選擇 IDTExtensibility2,從“事件”列表中選擇 OnConnection。這將創(chuàng)建 OnConnection 事件過程存根。
注意 您必須使由 IDTExtensibility2 界面提供的每個(gè)事件中都包括事件過程存根。如果您刪除了任何事件過程,工程就無(wú)法編譯。

  5.為下列每個(gè)事件添加事件過程存根:

●OnDisconnection
●OnStartupComplete
●OnBeginShutdown
●OnAddinsUpdate

  現(xiàn)在就可以為您的加載項(xiàng)添加功能了。

  將命令條控件集成到加載項(xiàng)中

  如果您的 COM 加載項(xiàng)有一個(gè)用戶界面,就可以添加用于顯示命令條的代碼,以方便用戶運(yùn)行您的加載項(xiàng)。此演練將顯示如何在宿主應(yīng)用程序中包含用于創(chuàng)建新命令條控件(工具欄按鈕或菜單項(xiàng))的代碼。加載您的加載項(xiàng)時(shí),會(huì)同時(shí)加載控件,用戶可以通過單擊按鈕或菜單項(xiàng)打開并使用加載項(xiàng)。

  創(chuàng)建命令條控件

  1.查找 OnConnection 事件過程。在 Private Sub 和 End Sub 行之間,添加代碼以創(chuàng)建新的命令條控件并將其指派給支持事件的 CommandBarButton 對(duì)象變量。整個(gè)過程將顯示如下:

Private Sub IDTExtensibility2_OnConnection(ByVal _
Application As Object, ByVal ConnectMode As _
AddInDesigNerobjects.ext_ConnectMode, ByVal AddInInst _
As Object, custom() As Variant)

' 存儲(chǔ)啟動(dòng)引用
Set appHostApp = Application

' 添加命令條
Set cbbButton = CreateBar()
End Sub
  如果您熟悉使用 Visual Basic 創(chuàng)建加載項(xiàng),就可能注意到,在 VBA 中創(chuàng)建加載項(xiàng)時(shí),不用設(shè)置命令條按鈕 OnAction 屬性的值。這是因?yàn)槭录詣?dòng)為您掛起。

  2.查找 OnDisconnection 事件過程。在 Private Sub 和 End Sub 行之間,添加代碼以便在卸載加載項(xiàng)時(shí)刪除命令條控件。整個(gè)過程將顯示如下:

Private Sub IDTExtensibility2_OnDisconnection(ByVal _
RemoveMode As AddInDesignerObjects.ext_DisconnectMode, _
custom() As Variant)

RemoveToolbar
' 移除要關(guān)閉的引用
Set appHostApp = Nothing
Set cbbButton = Nothing
End Sub
  3.通常,只要在代碼中存儲(chǔ)函數(shù),就會(huì)在 OnConnection 過程中添加您調(diào)用的函數(shù)對(duì)應(yīng)的代碼。該函數(shù)將創(chuàng)建命令條,設(shè)置命令按鈕的屬性,并提供錯(cuò)誤信息的處理。

Public Function CreateBar() As Office.CommandBarButton
' 指定命令條
Dim cbcMyBar As Office.CommandBar
Dim BTnMyButton As Office.CommandBarButton


On Error GoTo CreateBar_Err

Set cbcMyBar = appHostApp.CommandBars.Add(Name:="GreetingBar")

' 指定命令條按鈕
Set btnMyButton = cbcMyBar.Controls.Add(Type:=msoControlButton, _
Parameter:="Greetings")
With btnMyButton
.Style = msoButtonCaption
.BeginGroup = True
.Caption = "&Greetings"
.TooltipText = "Display Hello World Message"
.Width = "24"
End With

' 顯示并返回命令條
cbcMyBar.Visible = True
Set CreateBar = btnMyButton
Exit Function

CreateBar_Err:
MsgBox Err.Number & vbCrLf & Err.Description
End Function
  4.在 OnDisconnection 過程中添加您調(diào)用的函數(shù)對(duì)應(yīng)的代碼。該函數(shù)在加載宏被卸載時(shí)會(huì)刪除命令條。

Private Function RemoveToolbar()
 appHostApp.CommandBars("GreetingBar").Delete
End Function
  5.為 CommandBarButton 對(duì)象添加一個(gè)單擊事件過程。該過程將在單擊新的命令條按鈕時(shí)被調(diào)用。下面的代碼將顯示一條消息以表明單擊事件正在進(jìn)行:

Private Sub cbbButton_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
 MsgBox ("Hello World!")
End Sub
  6.保存您的工程。

  現(xiàn)在,COM 加載項(xiàng)完成。其余的步驟就是調(diào)試和測(cè)試代碼以確保它運(yùn)行順利,然后將加載項(xiàng)放入 DLL 文件中,該文件可以在其他裝有 Office XP 的計(jì)算機(jī)上進(jìn)行分發(fā)和使用。

  對(duì)加載項(xiàng)進(jìn)行調(diào)試和測(cè)試

  當(dāng)您在 VB 中開發(fā) COM 加載項(xiàng)時(shí),可以通過將工程置于運(yùn)行模式而調(diào)試加載項(xiàng)。如果工程處于運(yùn)行模式,就可以從 Office 應(yīng)用程序中加載 COM 加載項(xiàng)并使用它,通過使用任何 VB 調(diào)試工具而對(duì)它進(jìn)行測(cè)試和調(diào)試。

  使用 VB 調(diào)試和測(cè)試 COM 加載項(xiàng)

  1.將任何所需的斷點(diǎn)、Stop 語(yǔ)句或監(jiān)視放在代碼中。(可先不做這步)

  2.在“工程”菜單上,單擊“屬性”,在“調(diào)試”對(duì)話框中,選擇“等待要?jiǎng)?chuàng)建的部件”,單擊“確定”
 3.在“運(yùn)行”菜單上,單擊“全編譯執(zhí)行”。這將對(duì)工程進(jìn)行編譯(當(dāng)出現(xiàn)任何編譯錯(cuò)誤時(shí)將提出警告),然后將工程置于運(yùn)行模式。

  4.檢查“[運(yùn)行]”是否出現(xiàn)在VB的標(biāo)題欄中。

  注意 必須發(fā)布加載項(xiàng),宿主應(yīng)用程序才能使用它。

  4.啟動(dòng)一個(gè)新的 Excel 實(shí)例。因?yàn)閷⒓虞d項(xiàng)的加載行為設(shè)為 "Startup",所以只要啟動(dòng)應(yīng)用程序,加載項(xiàng)就會(huì)加載,OnConnection 事件就會(huì)發(fā)生,于是出現(xiàn) Greetings 按鈕?,F(xiàn)在,您可以使用為調(diào)試代碼而添加的斷點(diǎn)和 Stop 語(yǔ)句了。


  如果單擊 Greetings 按鈕,則只要在 VB 中運(yùn)行工程,Hello World 消息就會(huì)出現(xiàn)在編輯器之前(不在 Excel 之前)。在將工程生成為 DLL 文件后,該消息就會(huì)出現(xiàn)在 Excel 之前。

  5.當(dāng)完成調(diào)試和測(cè)試后,打開“運(yùn)行”菜單,單擊“終止工程”。這會(huì)清除臨時(shí)文件和注冊(cè)表項(xiàng),并將工程置于正確的狀態(tài)以生成 DLL 文件。

  為 COM 加載項(xiàng)生成 DLL

  編寫并調(diào)試代碼后,可以使您的加載項(xiàng)成為一個(gè) DLL 以將其部署到其他裝有 Office XP 的計(jì)算機(jī)上。

  在 VB 中將 COM 加載項(xiàng)打包為 DLL

  1.從“文件”菜單上,選擇“生成 myAddin.DLL”。

  2.在“生成工程”對(duì)話框中保存文件名 Greetings,并選擇要用于保存工程的位置。

  3.單擊“確定”。 (此時(shí),加載項(xiàng)可在本機(jī)正式使用)

  這一步驟將創(chuàng)建 COM 加載項(xiàng),添加適當(dāng)?shù)淖?cè)表項(xiàng),并使COM 加載項(xiàng)可用于 Office 宿主中。創(chuàng)建加載項(xiàng) DLL 時(shí),VB 使用給外接程序設(shè)計(jì)器提供的信息,將 DLL 注冊(cè)為 COM 加載項(xiàng)。VB 向注冊(cè)表中寫入加載項(xiàng)的名稱、說明和初始加載行為設(shè)置。加載項(xiàng)的宿主應(yīng)用程序讀取這些注冊(cè)表項(xiàng)并加載相應(yīng)的加載項(xiàng)。

  常見加載項(xiàng)開發(fā)問題疑難解答

  當(dāng)在開發(fā)環(huán)境中工作并在應(yīng)用程序之間進(jìn)行切換時(shí),可能會(huì)遇到某些錯(cuò)誤信息或意外行為。下面是一些常見問題及其解決方案。

  出現(xiàn)編譯錯(cuò)誤或語(yǔ)句結(jié)束在編輯器中無(wú)效

  要確保為工程引用了適當(dāng)?shù)膶?duì)象庫(kù)。

  運(yùn)行工程并打開新的宿主應(yīng)用程序?qū)嵗龝r(shí)沒有任何反應(yīng)
 
  ●要確保字“已發(fā)布的”出現(xiàn)在所運(yùn)行的加載項(xiàng)的標(biāo)題欄中。如果不如此,就必須運(yùn)行工程。

  ●單擊每個(gè)打開的應(yīng)用程序窗口。您的對(duì)象可能正在運(yùn)行,但只有在您單擊所打開的應(yīng)用程序的第一個(gè)實(shí)例時(shí),它才是可見的。

  ●要確保正確地指定并設(shè)置模塊級(jí)變量。

  ●在宿主應(yīng)用程序中,要確保在“COM 加載項(xiàng)”對(duì)話框中選中了您的加載項(xiàng)??梢酝ㄟ^向工具欄中添加 COM 加載項(xiàng)命令而對(duì)宿主應(yīng)用程序進(jìn)行自定義。此命令將打開“COM 加載項(xiàng)”對(duì)話框。

  將 COM 加載項(xiàng)對(duì)話框添加到工具欄中

  1.打開EXCEL“工具”菜單,單擊“自定義”,選擇“命令”選項(xiàng)卡。在“類別”下,選擇“工具”。沿“命令”列表向下滾動(dòng),以查找“COM 加載項(xiàng)”。將“COM 加載項(xiàng)”拖動(dòng)到工具欄中,以創(chuàng)建新的按鈕,然后關(guān)閉“自定義”對(duì)話框。

  2.在該工具欄上,單擊剛添加的“COM 加載項(xiàng)”按鈕。

  3.在“COM 加載項(xiàng)”對(duì)話框中,確認(rèn)選中您的加載項(xiàng)旁邊的復(fù)選框。若要卸載加載項(xiàng),請(qǐng)清除該復(fù)選框。

  對(duì)象出現(xiàn)在宿主應(yīng)用程序中但沒有響應(yīng)

  可能是有多個(gè)對(duì)象實(shí)例在運(yùn)行。用于檢測(cè)和移除已有的具有該名稱的代碼可能沒在運(yùn)行。檢查并調(diào)試您的 OnDisconnection 代碼。

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多