999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

將Excel VBA代碼進(jìn)行封裝并調(diào)用的技術(shù)要點(diǎn)

2021-12-17 00:50:31張金沙陳建勇鄭家翔雷輝劉惠蓮
電腦知識與技術(shù) 2021年33期

張金沙 陳建勇 鄭家翔 雷輝 劉惠蓮

摘要:為保護(hù)VBA代碼,把VBA主要程序按VB格式修改,然后利用VB6進(jìn)行編譯,形成以二進(jìn)制形式存在的DLL文件,在需要時調(diào)用。DLL文件很難破解,因而有效地保護(hù)了VBA的核心代碼,大大提高了程序的安全性。

關(guān)鍵詞:Excel;VBA;封裝;DLL

中圖分類號:TP311? ? ? 文獻(xiàn)標(biāo)識碼:A

文章編號:1009-3044(2021)33-0065-03

開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):

1 背景

Excel VBA(Visual Basic for Applications)是內(nèi)嵌于微軟Office軟件Excel中的程序開發(fā)語言,在Excel中可直接運(yùn)行VBA程序,從而完成較復(fù)雜的工作[1-2],例如一次運(yùn)行就能完成試卷質(zhì)量的全部分析、操控網(wǎng)頁實(shí)現(xiàn)學(xué)生成績的批量上傳[3]、實(shí)現(xiàn)復(fù)雜的統(tǒng)計工作等等,真正實(shí)現(xiàn)高效辦公。

雖然Excel提供了對VBA代碼的保護(hù),即在Excel的VBE(Visual Basic Edirtor)界面下,找到“工具”的“VBAProject屬性”,在“保護(hù)”頁面進(jìn)行密碼設(shè)置,但是保護(hù)作用有限,只要具備一定VBA常識的人就能利用網(wǎng)絡(luò)上的破解工具解密,且用VBA編寫的程序代碼不能在VBE環(huán)境下編譯,而是“寄生”在宿主應(yīng)用程序Excel中運(yùn)行,解密后能直接編輯,給居心叵測之人有可乘之機(jī),給程序帶來嚴(yán)重安全隱患。

2 技術(shù)要點(diǎn)

鑒于VBA的優(yōu)勢,“試卷質(zhì)量量化評測系統(tǒng)的開發(fā)與應(yīng)用”課題組選用VBA為開發(fā)語言。為提高軟件的安全性,利用Microsoft Visual Basic 6.0(以下簡稱VB6),將VBA的主要程序代碼封裝為很難破解的DLL(Dynamic Link Library)文件,在需要的地方進(jìn)行調(diào)用。

為避免閱讀長篇程序而分散注意力,下面用一個簡單且完整的演示程序,分析將VBA封裝為DLL文件并進(jìn)行調(diào)用的技術(shù)要點(diǎn)。

演示程序功能使用一般VBA代碼、VB與VBA通用代碼和把代碼封裝后調(diào)用等三種不同方式,完成在C3單元格顯示A3與B3單元格的積、在D3單元格顯示實(shí)現(xiàn)方式,目的是清晰展示VBA代碼按VB格式修改的關(guān)鍵步驟,見圖1。

2.1 DLL 文件的創(chuàng)建

DLL 文件是動態(tài)鏈接文件,它存放的是各類程序的函數(shù)或子過程,當(dāng)程序需要時可進(jìn)行調(diào)用。一般軟件使用DLL技術(shù)的主要目的是為了節(jié)省系統(tǒng)資源,提高程序的運(yùn)行效率,但在本文是利用DLL文件的二進(jìn)制屬性、很難破解的特點(diǎn),提高VBA代碼的安全性[4-5]。

2.1.1 編寫VBA代碼

啟動Excel,命名工作簿為“VBA封裝調(diào)用”并保存。按Alt+F11進(jìn)入VBE,點(diǎn)“插入”,選“模塊”,在新增的“模塊1”中輸入下面程序。

Sub VBAcheng()? '用一般VBA代碼實(shí)現(xiàn)

Range("C3") = Cells(3, 1) * Cells(3, 2)

Range("d3") = "VBA"

End Sub

2.1.2 將VBA代碼修改為VB所能識別的形式

在“模塊1”中繼續(xù)錄入下面程序:

Sub VBcheng() '用 VB與VBA通用代碼實(shí)現(xiàn)

Dim exlapp As Object? ? ?'定義變量exlapp為object

Set exlapp = GetObject(, "Excel.Application")? ? '使exlapp表示為EXCEL對象

exlapp.Range("C3") = exlapp.Cells(3, 1) * exlapp.Cells(3, 2)

exlapp.Range("d3") = "VB與VBA通用"

End Sub

說明:1)在制作DLL時要用VB6進(jìn)行編譯,必須將VBA代碼修改為VB所能識別的形式,這是成功的關(guān)鍵。2)VB不能識別Excel的對象,故在程序中應(yīng)先定義exlapp為EXCEL對象,然后在所有EXCEL對象前面均加上exlapp,例如sheet→exlapp.sheet,cells→exlapp.cells, range→exlapp.range,workbook→exlapp.workbook等等。3)如VBA程序中有Application.等代碼,也要加上exlapp. 例如Application.quit要修改為exlapp.Application.quit、Application.ScreenUpdating要修改為exlapp.Application.ScreenUpdating等等。4)修改后的代碼既能在Excel中直接運(yùn)行,也可在VB中成功編譯。5)為防止制作DLL后調(diào)試?yán)щy,根據(jù)經(jīng)驗(yàn),最好把要制作DLL文件的代碼先在VBE中進(jìn)行修改并調(diào)試無誤后,再轉(zhuǎn)入VB6中編譯。

2.1.3 制作DLL文件

第一步:啟動VB6,新建“ActiveX DLL”。修改工程名和類名分別為EncapDLL和MyClas,見圖2。

第二步:建立引用。點(diǎn)擊“工程”→“引用”→“Microsoft Office X Object Library”。其中X為版本號,與Excel的版本相關(guān),一般在11.0以上。

第三步:編寫代碼。把上述VBE中經(jīng)過修改、調(diào)試的代碼(即VBcheng()過程)復(fù)制在代碼窗。

Sub VBDcheng() '在名字中間加一個“D”,以示和VBcheng()過程區(qū)別

Dim exlapp As Object

Set exlapp = GetObject(, "Excel.Application")

exlapp.Range("C3") = exlapp.Cells(3, 1) * exlapp.Cells(3, 2)

exlapp.Range("d3") = "封裝調(diào)用" '僅把顯示內(nèi)容修改

End Sub

第四步:生成DLL。為方便今后升級和修改程序,必須保存工程;生成DLL前,還要點(diǎn)菜單“運(yùn)行”→“啟動”,進(jìn)一步檢查修改后有無錯誤;最后點(diǎn)菜單“文件”→“生成EncapDLL.dll”。

2.2 DLL 的調(diào)用

2.2.1 注冊DLL

手工注冊較方便,方法是打開“VBA封裝調(diào)用”工作簿,進(jìn)入VBE,在菜單中點(diǎn)擊“引用”→“瀏覽”→找到“EncapDLL.dll”所在文件夾并選中此文件。

2.2.2 引用DLL

進(jìn)入VBE后,在左窗“工程”中,找到并雙擊ThisWorkbook,在彈出的窗口中添加如下代碼:

Private Sub Workbook_BeforeClose(Cancel As Boolean) '關(guān)閉工作簿之前卸載EncapDLL文件

Shell "Regsvr32 /s /u " & Chr(34) & ThisWorkbook.Path & "\ EncapDLL.dll" & Chr(34)

End Sub

Private Sub Workbook_Open()'打開工作簿時加載EncapDLL文件

Shell "Regsvr32 /s " & Chr(34) & ThisWorkbook.Path & "\ EncapDLL.dll" & Chr(34)

End Sub

經(jīng)過上述引用后,EncapDLL.dll與“VBA封裝調(diào)用”工作簿必須如影隨形地保存于同一文件夾內(nèi),否則會出錯。

2.2.3 調(diào)用DLL

繼續(xù)在VBE中,在“模塊1”下添加如下代碼:

Sub VBDLLcheng()

Dim ABC As New MyClas? '定義ABC為新類,即為DLL文件中的類模塊MyClas

ABC.VBDcheng? ?'調(diào)用EncapDLL中提供的過程VBDcheng(),完成積的運(yùn)算功能,而原VBA代碼被隱藏

Set ABC = Nothing? '釋放類資源

End Sub

2.3 演示程序界面設(shè)計

2.3.1 界面設(shè)計

在表單中添加按鈕的方法:點(diǎn)菜單“視圖”→“工具欄”→“控件工具箱”→找到按鈕即可添加按鈕。其他設(shè)計參考圖1。

2.3.2 按鈕與過程關(guān)聯(lián)

進(jìn)入VBE后,在左窗“工程”中,找到并雙擊Sheets1,在彈出的窗口中添加如下代碼,將按鈕與對應(yīng)過程關(guān)聯(lián):

Private Sub CommandButton1_Click()

Call VBAcheng? '調(diào)用VBA代碼編寫的過程

End Sub

Private Sub CommandButton2_Click()

Call VBcheng? ?'調(diào)用VB與VBA通用代碼的過程)

End Sub

Private Sub CommandButton3_Click()

Call VBDLLcheng '調(diào)用封裝后的過程

End Sub

Private Sub CommandButton4_Click()? '清除運(yùn)算結(jié)果

Range("C3") = ""

Range("d3") = ""

End Sub

至此演示程序完成。

實(shí)際運(yùn)用時,在提供給用戶的版本中,可將VBA的源代碼(本例中的VBAcheng()過程和VBcheng()過程 )刪除,只需保留能完成相功能的封裝代碼過程(本例中VBDLLcheng()過程)即可。

3 結(jié)束語

把VBA代碼進(jìn)行封裝并調(diào)用的過程可總結(jié)如圖3,其關(guān)鍵步驟是將VBA代碼修改為VB可識別的形式。

制作DLL文件的主要目的是保護(hù)VBA代碼。實(shí)踐證明,把VBA程序代碼經(jīng)過簡單修改,利用VB6進(jìn)行編譯,形成很難破解的以二進(jìn)制形式存在的DLL文件,有效地保護(hù)了VBA的核心代碼,大大提高了軟件的安全性。

參考文獻(xiàn):

[1] 孟兵,劉瓊.Excel VBA應(yīng)用與技巧大全[M].北京:機(jī)械工業(yè)出版社,2021.

[2] 馬致明,陳興,林雨萌.巧用Excel VBA開發(fā)體溫檢測統(tǒng)計報表軟件[J].電腦知識與技術(shù),2020,16(33):209-211.

[3] 張金沙,金笛,石劭紅.基于VBA成績自動上傳系統(tǒng)的開發(fā)[J].電腦知識與技術(shù),2016,12(32):80-82.

[4] 周維京.VBA封裝技術(shù)分析[J].電腦與電信,2008(4):34-35.

[5] 百度經(jīng)驗(yàn).封裝ExcelVBA代碼[EB/OL].[2020-12-20].

https://jingyan.baidu.com/article/f71d603756c55a1ab641d1fb.html.

【通聯(lián)編輯:謝媛媛】

主站蜘蛛池模板: 中文字幕 日韩 欧美| 日本免费a视频| 欧美精品亚洲二区| 99热这里都是国产精品| av无码一区二区三区在线| 日韩一级毛一欧美一国产| 日本一本正道综合久久dvd| 国产av剧情无码精品色午夜| 日韩无码真实干出血视频| 精品無碼一區在線觀看 | 国产亚洲欧美另类一区二区| 日本高清成本人视频一区| 欧美精品aⅴ在线视频| 91在线播放免费不卡无毒| 91小视频在线观看免费版高清| 高潮毛片免费观看| 91美女视频在线观看| 国产欧美又粗又猛又爽老| 日韩精品久久无码中文字幕色欲| 成人亚洲国产| 日韩毛片在线播放| 欧美激情视频二区| 亚洲黄色高清| 国产探花在线视频| 40岁成熟女人牲交片免费| 久久一级电影| 一本一道波多野结衣av黑人在线| 香蕉久久永久视频| 免费Aⅴ片在线观看蜜芽Tⅴ | 精品99在线观看| 男女男精品视频| 国产爽歪歪免费视频在线观看| 久久久无码人妻精品无码| 黄色一及毛片| 啪啪免费视频一区二区| 99久久精品美女高潮喷水| 特级做a爰片毛片免费69| 中文字幕av一区二区三区欲色| 国产无码在线调教| 日本三级精品| 精品自拍视频在线观看| 日韩精品欧美国产在线| 成人毛片免费在线观看| 亚洲一区第一页| 99精品视频在线观看免费播放| 日韩AV无码一区| 欧美劲爆第一页| 国产在线一区视频| 欧美区国产区| 国产一区亚洲一区| 日韩精品一区二区三区免费| 99精品在线看| AV老司机AV天堂| 无码在线激情片| 国产精品亚洲а∨天堂免下载| 91麻豆国产在线| 国产女人18毛片水真多1| 手机精品视频在线观看免费| 玖玖免费视频在线观看| 亚洲av日韩av制服丝袜| 久久无码av三级| 中文字幕永久在线观看| 欧美在线视频a| 亚洲欧美一区二区三区麻豆| 欧美成人手机在线视频| 国产黄色爱视频| 欧美另类一区| 中美日韩在线网免费毛片视频| 亚洲国产成人精品一二区| 欧美在线一级片| 国产系列在线| 真人免费一级毛片一区二区| 成年人国产视频| 国产无人区一区二区三区| 国产色爱av资源综合区| 99精品久久精品| 欧美一级一级做性视频| 成人免费一级片| 免费高清a毛片| 麻豆精品在线视频| 天天色综合4| 免费中文字幕一级毛片|