下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、將VBA代碼編譯封裝成為DLL動態(tài)鏈接庫方法在OFFICE中使用VBA雖然方便,并且功能強(qiáng)大,但是VBA在代碼的保護(hù)上卻存在著缺陷。如果不對VBA工程設(shè)置密碼保護(hù),代碼很容易被人瀏覽乃至竊取。而且即使設(shè)置了密碼保護(hù),也很容易被人破解。因此,要想真正保護(hù)VBA代碼,要想讓別人無法或難于破解您的VBA代碼,那么,我們可以將VBA代碼編譯成為DLL動態(tài)鏈接庫,也就是封裝成為DLL的意思,下面是與此相關(guān)的方法,希望對您有所幫助。一、為什么要編譯成為DLL我們知道,VisualC+、VisualBasic和C+Builder以及Delphi等編譯器所編譯出來的程序不容易被人破解(相對來說),這是因?yàn)榇a
2、被編譯成了可執(zhí)行文件或者動態(tài)鏈接庫文件。那么,我們是否可以將VBA代碼封裝到動態(tài)鏈接庫文件中,然后用Word調(diào)用呢?回答是肯定的。而且這樣做還有一個(gè)好處,即可以加快代碼的運(yùn)行速度。二、將VBA代碼封裝成動態(tài)鏈接庫假如我們已經(jīng)寫好了一個(gè)VBA工程,而且運(yùn)行無誤。建立VB工程及一般性操作首先,我們需要兩種工具,其中當(dāng)然包括MicrosoftWord,另外一種是MicrosoftBasic6.0。打開MicrosoftBasic6.0,在“新建工程”中選取“ActiveXDLLM,新建一個(gè)工程。在屬性窗口中將工程名改為VBAPrj,類模塊名改為VBACIs。然后在“工程”菜單下打開“引用”,選取“M
3、icrosoftOffice11.0ObjectLibrary”這一步很是關(guān)鍵,切不可遺漏,然后保存工程。下面我們所做的是向工程內(nèi)添加代碼。將VBAX程中的一個(gè)名為Test過程的代碼選定后復(fù)制,然后切換到VB編輯器,選中VB的工程管理器中的類模塊VBACIs,將代碼粘貼至代碼編輯窗口中,于是這段代碼便成了類模塊VBACIs一個(gè)方法,然后將工程編譯生成dll文件(如果編譯成功的話)。在Word中,我們就可以通過類模塊VBACIs建立的對象來調(diào)用此方法(具體怎么調(diào)用,我們將后面介紹)。當(dāng)然,我們可以繼續(xù)向工程里添加代碼。修改代碼雖然VBA源于VB但是兩者畢竟存在著一些差異。因此,需要對轉(zhuǎn)移到VB中
4、的VBA代碼做一些必要的修改。A、修改VBA代碼中所特有類型的對象如果我們所添加的代碼里有VBA所特有類型-如Documen>RangBookMark等所建立的對象,編譯時(shí)會提示錯(cuò)誤,因?yàn)閂B不能夠識別這些對象。此時(shí)修改的方法是,將這些對象作為過程或函數(shù)的參數(shù)進(jìn)行傳遞。需要注意的是,這些參數(shù)的類型都一律設(shè)為Object。例如,我們在過程Test中要訪問對象ThisDocument,但是VB無法識別ThisDocument于是我們就為過程test添加一個(gè)參數(shù)Doc來傳遞ThisDocument,即Test可定義為Test(DocAsObject)oE、修改VBA所特有一般變量VB也無法識別
5、VBA特有的一般變量,如ProtectType,同樣,我們也將其作為過程后函數(shù)的參數(shù)進(jìn)行傳遞,不過其類型名都一律設(shè)為Variant。C、修改VBA所特有常量如果在VBA代碼中出現(xiàn)了這樣的語句:ProtectionType=wdNoProtection很明顯,wdNoProtection是Word所獨(dú)有的常量,不為VB所能識別,因而無法通過編譯。怎樣解決這個(gè)問題呢?當(dāng)然,我們可以用修改變量的方法予以修改。但是聰明的讀者會想到:如果我們知道了wdNoProtection的值,就可以直接將值賦給Protect!onType。但是接下來的一個(gè)問題是:我們怎樣才能獲得wdNoProtection的值呢?
6、方法很簡單,就是讓W(xué)ord“開口”告訴我們。在Word一個(gè)事件中添加以下語句:MsgBoxCStr(wdNoProtection)其中CStr是類型轉(zhuǎn)換函數(shù),返回參數(shù)相應(yīng)的字符串。只要在Word中觸發(fā)此事件,會彈出一個(gè)對話窗,顯示這就是Word所告訴我們的:wdNoProtection的值是。于是我們就可以將語句ProtectionType=wdNoProtection改為ProtectionType=1,問題到此就迎刃而解了。三、封裝用戶窗體我們也可以將用戶窗體封裝到動態(tài)鏈接庫文件里。首先打開Word的VBA編輯器,選中工程資源管理器中的用戶窗體,點(diǎn)擊右鍵,選擇“導(dǎo)出文件”,選定路徑后,將窗
7、體文件保存。然后切換到VB編輯器,在“工程”菜單中選擇“添加文件”命令,添加保存的窗體文件。添加結(jié)束后,我們會發(fā)現(xiàn)VB編輯器中的工程資源管理器中的設(shè)計(jì)器出現(xiàn)了剛添加的窗體名,選中后雙擊,在窗體編輯器中就會顯現(xiàn)所添加的用戶窗體。到了這里,讀者會問:窗體還有代碼呢,怎么辦?先別急,試一試下面的操作,你就會明白,問題早已不再是問題了。選中工程資源管理器中的用戶窗體,點(diǎn)擊右鍵,選擇“查看代碼”,你就會高興發(fā)現(xiàn),在代碼編輯框中出現(xiàn)了窗體所對應(yīng)的代碼。原來,在我們導(dǎo)入窗體文件的同時(shí)也導(dǎo)入了窗體的代碼!當(dāng)然高興之余,不要忘了還要對這些代碼按照我們上述的方法進(jìn)行必要修改,以保證代碼順利地通過編譯。這樣Word
8、就可以通過類模塊VBACIs間接地調(diào)用窗體。四、在Word中引用動態(tài)鏈接庫假如經(jīng)過我們編譯已生成了一個(gè)動態(tài)鏈接庫文件VBAPrj.dll,其中有一類模塊VBACIs,此類模塊有一個(gè)方法Test(DocAsObject)<>接下來我們所要做的是用Word調(diào)用Test,有三種方法可供選擇:1 .打開Word的VBA編輯器中ThisDocument代碼窗口,點(diǎn)”工具“菜單下的”引用”命令,在引用對話框中引用該動態(tài)鏈接庫。調(diào)用代碼如下:DimVBACIsAsNewVBAPrj.VBACIsVBACIs.Test(ThisDocument)2 .如果知道該動態(tài)鏈接庫文件的位置,可以在This
9、Document代碼窗口以代碼形式引用,代碼如下:PrivateSubDocument_Open()OnErrorResumeNextMe.VBProject.References.AddFromFile"D:VBAPrj.dll”EndSub3 .將動態(tài)鏈接庫文件拷貝到Word文檔同一目錄下,可在ThisDocument代碼窗口中建立如下引用函數(shù):PrivateFunctionGetProjectDoc()AsObjectOnErrorResumeNextDimVBACIsAsObjectSetVBACIs=CreateObject("VBAPrj.VBACIs”)IfVBACIsIsNothingThenMsgBox“VBAPrj.dll必須和文檔在同一目錄下!”ExitFunctionEndIfSetGetProjectDoc=VBACIsEndFunction然后以以下代碼形式調(diào)用Test:DimobjPrjDocAsObjectSetobjPrjDoc=GetProjectDocCallobjPrjDoc.T
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 3903.6-2024鞋類整鞋試驗(yàn)方法防滑性能
- 客戶答謝會致辭(15篇)
- 感恩父母演講稿(19篇)
- 堅(jiān)持新發(fā)展說課
- 當(dāng)幸福來敲門觀后感集合15篇
- 初級會計(jì)實(shí)務(wù)-初級會計(jì)《初級會計(jì)實(shí)務(wù)》模擬試卷93
- 智研咨詢發(fā)布-2024年中國智能物聯(lián)網(wǎng)(AIOT)行業(yè)市場競爭格局、行業(yè)政策及需求規(guī)模預(yù)測報(bào)告
- 2025年有機(jī)肥行業(yè)發(fā)展趨勢分析報(bào)告
- 二零二五年度駕駛員勞務(wù)派遣合同協(xié)議書3篇
- 應(yīng)急預(yù)案的知識普及
- 2023-2024年員工三級安全培訓(xùn)考試題及參考答案(綜合題)
- 對口升學(xué)語文模擬試卷(6)-江西?。ń馕霭妫?/a>
- 招標(biāo)采購基礎(chǔ)知識培訓(xùn)
- 五年級口算題卡每天100題帶答案
- 2025屆新高考英語復(fù)習(xí)閱讀理解說明文解題策略
- 《社區(qū)康復(fù)》課件-第一章 總論
- 上海中考英語考綱詞匯
- 【工商管理專業(yè)畢業(yè)綜合訓(xùn)練報(bào)告2600字(論文)】
- 2024年全國初中數(shù)學(xué)聯(lián)合競賽試題參考答案及評分標(biāo)準(zhǔn)
- 《幼兒園健康》課件精1
- 22S803 圓形鋼筋混凝土蓄水池
評論
0/150
提交評論