EXCEL-VBA文件封裝成EXE的方法_第1頁
EXCEL-VBA文件封裝成EXE的方法_第2頁
EXCEL-VBA文件封裝成EXE的方法_第3頁
EXCEL-VBA文件封裝成EXE的方法_第4頁
EXCEL-VBA文件封裝成EXE的方法_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、EXCEL VBA文件封裝成EXE的方法XLS封裝成EXE制作全攻略 ldhyob  2003.12寫出此文以幫助關(guān)注那張?zhí)陌嬗褌兡芡耆砸血毩⑼瓿蓌ls2exe的過程,實現(xiàn)簡單的封裝。首先申明,將xls做成exe并不是指就能使您的VBA工程受到堅強的保護,當(dāng)然您可以通過數(shù)種方法來提高xls文檔VBA工程防止查看的保護幾率,如屏蔽一些系統(tǒng)熱鍵、監(jiān)控VBE窗口的開啟、給文檔加上口令保護、加VBA口令、使VBA“不可查看”、利用宏表4.0來禁止用戶取消宏來查看文檔等等,但“道高一尺,魔高一丈”,所以就沒有必要去追求所謂的“完美”加密關(guān)于這些保護方法不屬本文敘述范圍,請版友在論

2、壇上查看相關(guān)帖。      假如您手頭已有一xls文檔等待封裝,假如您機子上已安裝有VB6開發(fā)系統(tǒng),那么請跟著往下操作:      一、用VB制作EXE文件頭部分      1、打開VB,“文件”-“新建工程”-“標準EXE”;      2、此時會出現(xiàn)名為Form1的默認窗體編輯窗口,F(xiàn)orm1將作為軟件啟動封面窗體,打開該Form1的屬性窗口,對如下屬性進行設(shè)置:BorderStyle=0,StartUpPosition=2,Ico

3、n與Picture屬性設(shè)置成你需要的圖標(這也將成為你EXE的圖標)和設(shè)計好準備使用的圖片(即軟件封面),窗體的大小設(shè)置成您需要的合適值即可。      3、往窗體中添加一個時鐘控件timer1,并將其InterVal屬性設(shè)為1000。      4、雙擊窗體打開代碼編輯窗口,錄入以下代碼:Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, B

4、yVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As LongPrivate Declare Function GetTempFileName Lib "kernel32" Alias "GetTempFileNameA" (ByVal lpszPath As String, ByVal lpPrefixString As String, ByVal wUnique As Long, ByVal lpTempFileNam

5、e As String) As LongPrivate Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As LongPrivate Const MAX_PATH = 260Private Const EXE_SIZE = 81920 '本EXE實際字節(jié)大小Private Type FileSection  Bytes() As Byt

6、eEnd TypePrivate Type SectionedFile  Files() As FileSectionEnd TypeDim StopTime As IntegerPrivate Sub Form_Activate()If Command() = "" Then Main1End SubPrivate Sub Form_Load()On Error Resume NextIf Command() = "" Then  Form1.Visible = True  SetWindow

7、Pos Form1.hwnd, -1, 0, 0, 0, 0, &H2 Or &H1 '將封面置為最頂層窗體Else  Form1.Visible = False  Form1.Timer1.Enabled = TrueEnd IfEnd SubSub Main1()Dim StartXLSByte, I, J As LongDim AppPath, XlsTmpPath As StringDim myfile As SectionedFileDim xlApp As Excel.Application '定義EXCEL類

8、Dim xlBook As Excel.Workbook '定義工件簿類Dim xlsheet As Excel.Worksheet '定義工作表類AppPath = App.PathXlsTmpPath = GetTempFile() '取得XLS臨時文件名(帶路徑)If VBA.Right(App.Path, 1) = "" Then AppPath = VBA.Left(App.Path, VBA.Len(App.Path) - 1)Open AppPath & "" & App.EXEName &

9、".exe" For Binary As #1ReDim myfile.Files(1)ReDim myfile.Files(1).Bytes(1 To LOF(1) - EXE_SIZE)Open XlsTmpPath For Binary As #2    Get #1, EXE_SIZE + 1, myfile.Files(1).Bytes '此處數(shù)字要根據(jù)EXE實際頭文件大小更改設(shè)定    Put #2, 1, myfile.Files(1).BytesClose #1Close #2Set xlApp = Creat

10、eObject("Excel.Application") '創(chuàng)建EXCEL應(yīng)用類Set xlBook = xlApp.Workbooks.Open(FileName:=XlsTmpPath, password:="ldhyob") '打開EXCEL工作簿,已知該工作簿已加打開口令為ldhyob'以下星號括起部分代碼是往xls里寫數(shù)據(jù)(也可不往工作簿里寫數(shù)據(jù)的方法,而生成txt的方法),作用是保存本exe的絕對路徑與臨時xls絕對路徑,以便于EXE重寫更新與臨時文件刪除'*Set xlsheet = xlBook.Works

11、heets("temp") '設(shè)置活動工作表xlsheet.Cells(1, 1) = AppPath & "" & App.EXEName & ".exe" '將該EXE完全路徑存在工作表單元格內(nèi)xlsheet.Cells(2, 1) = XlsTmpPath '將該EXE本次運行產(chǎn)生XLS臨時文件路徑存在工作表單元格內(nèi)'*xlApp.Visible = True '設(shè)置EXCEL可見Set xlApp = Nothing '釋放xlApp對象StopTime

12、= 0Me.Timer1.Enabled = True '啟動時鐘End SubPrivate Function GetTempFile() As String '用來產(chǎn)生系統(tǒng)臨時文件名Dim lngRet As LongDim strBuffer As String, strTempPath As StringstrBuffer = String$(MAX_PATH, 0)lngRet = GetTempPath(Len(strBuffer), strBuffer)If lngRet = 0 Then Exit FunctionstrTempPath = Left$(strB

13、uffer, lngRet)strBuffer = String$(MAX_PATH, 0)lngRet = GetTempFileName(strTempPath, "tmp", 0&, strBuffer)If lngRet = 0 Then Exit FunctionlngRet = InStr(1, strBuffer, Chr(0)If lngRet > 0 ThenGetTempFile = Left$(strBuffer, lngRet - 1)ElseGetTempFile = strBufferEnd IfEnd FunctionPrivat

14、e Sub Timer1_Timer()On Error Resume NextIf Command() <> "" Then   If VBA.Dir(Command() <> "" Then      Kill Command() '刪除本次運行遺留的臨時XLS文件   Else      End   End IfElseStopTime = StopTime + 1 '計

15、時累加If StopTime = 1 Then Unload Me: End '2秒后自動關(guān)閉退出End IfEnd Sub      5、可保存工程,如取名為“工程1”;      6、進行編譯,“文件”-“生成工程1.exe”,此時也可將生成的EXE另外取名,如取名叫abc.exe。      7、查看第6步生成的EXE文件字節(jié)大小,并將具體數(shù)字記下來,并將VB模塊中的“Private Const EXE_SIZE = 81920”保證一致(這里的81920是筆者

16、例子的結(jié)果數(shù)字,每個人在實際時會有不同)。此例此步很重要,必須要做,該數(shù)字在xls文檔VBA中還要使用到。      至此,文件頭部分已做完,abc.exe文件也已生成于磁盤中。           特別提示:編譯前,確保VB里"工程"-"引用"里"Microsoft Excel 9.0 Object Library"前面的勾已打上.      二、xls文檔部分操作 

17、;     1、給工作簿增加一個工作表temp,將其置為隱藏。      2、增加xls文檔宏代碼以實現(xiàn)文檔關(guān)閉時EXE數(shù)據(jù)刷新。      打開xls文檔,打開VBE窗口,在ThisWorkBook代碼區(qū)頭部加入以下代碼:Private Const EXE_SIZE = 81920 '此處數(shù)字為前面第7步得到的EXE文件字節(jié)數(shù)Private Type FileSection  Bytes() As ByteEnd Type在Workbook_BeforeC

18、lose事件中加入如下代碼(對原有的代碼可保留):    Dim myfile As FileSection '定義變量Dim comc, exec, xlsc As String '定義變量    Application.Visible = False '隱藏EXCEL主窗口    exec = WorkSheets(“temp”).cells(1,1).value    xlsc = WorkSheets(“temp”).cells(2,1).value    com

19、c = exec & " " & xlsc    Open exec For Binary As #1 '打開EXE文件    ReDim myfile.Bytes(1 To EXE_SIZE)    Get #1, 1, myfile.Bytes '取得固有文件頭    Close #1    If VBA.Dir(exec) <> "" Then Kill exec     Open exec For Binary As #1 '生成新的EXE文件    Put #1, 1, myfile.Bytes '先寫入文件頭    Open  xlsc For Binary As #2 '打開xls臨時文件    ReDim myfile.Bytes(1 To FileLen(xlsc

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論