2.此時會出現壹個名為Form1的默認表單編輯窗口,Form1將作為軟件啟動的封面表單。_
打開Form1的屬性窗口,設置以下屬性:BorderStyle=0,StartUpPosition=2,_
Icon和Picture屬性設置為您需要的圖標(也將是您的EXE的圖標)和設計好可以使用的圖片(即軟件封面)。_
只需將表單的大小設置為您需要的適當值。3.向該窗體添加壹個時鐘控件timer1,並將其InterVal屬性設置為1000。_
4.雙擊該表單以打開代碼編輯窗口,並輸入以下代碼:
私有聲明函數SetWindowPos Lib " user 32 "(ByVal hwnd As Long、ByVal hWndInsertAfter As Long、ByVal x As Long、ByVal y As Long、ByVal cx As Long、ByVal cy As Long、ByVal w flags As Long)Long
私有聲明函數GetTempFileName Lib "kernel32 "別名" GetTempFileName a "(ByVal lpszPath為字符串,ByVal lpPrefixString為字符串,ByVal wUnique為Long,ByVal lpTempFileName為字符串)為Long
私有聲明函數GetTempPath Lib "kernel32 "別名" GetTempPathA "(ByVal nBufferLength為Long,ByVal lpBuffer為String)為Long
私有常量MAX_PATH = 260
private const EXE _ size = 81920 '此EXE的實際字節大小。
私有類型文件部分
Bytes()作為字節
結束類型
私有類型SectionedFile
Files()作為文件部分
結束類型
整數形式的Dim停止時間
私有子窗體_Activate()
如果Command() = " "那麽Main1
末端接頭
私有子窗體_Load()
出錯時繼續下壹步
如果Command() = " "那麽
表單1。可見=真
SetWindowPos Form1.hwnd,-1,0,0,0,0 & amp;H2或& ampH1 '將封面設置為頂層表單,否則為表單1。可見=假形式1。定時器1。
啟用=真
如果…就會結束
末端接頭
Sub Main1()
Dim StartXLSByte,I,J As Long
Dim AppPath,XlsTmpPath作為字符串
將我的文件顯示為節文件
Dimxlappasasexcel。“應用程序”定義了EXCEL類。
將xlBook調成Excel。“工作簿”定義工作簿類。
將xlsheet調成Excel格式。“Worksheet”定義工作表類。
AppPath = App。小路
XlsTmpPath = GetTempFile()'獲取XLS臨時文件名(帶路徑)。
如果VBA。對(App。Path,1) = "\ "那麽AppPath = VBA。左(App。路徑,VBA。Len(應用。路徑)- 1)
打開AppPath & amp" \ " & ampApp。EXEName & amp".exe”作為#1
ReDim myfile。文件(1)
ReDim myfile。文件(1)。字節(1到LOF(1) - EXE_SIZE)
打開二進制文件的XlsTmpPath作為#2
Get # 1,EXE _ size+1,myfile。文件(1)。這裏的數字應該根據EXE的實際頭文件大小來改變。
把#2,1,我的文件。文件(1)。字節
關閉#1
關閉#2
Set xlapp = createobject ("EXCEL。application ")'創建Excel應用程序類。
設置xlBook = xlApp。Workbooks.Open(文件名:=XlsTmpPath,密碼:="ldhyob ")
打開EXCEL工作簿。已知打開工作簿的密碼是ldhyob。如果您的工作簿沒有密碼,請刪除該參數。下面的星號括起了在xls中寫入數據的部分代碼(或者_不在工作簿中寫入數據)
方法,以及生成txt的方法),作用是保存這個exe的絕對路徑和臨時xls的絕對路徑, 以便可以重寫和更新EXE,並且可以刪除臨時文件' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '
Set XL sheet = XL book . worksheets(" temp ")'設置活動工作表。
xlsheet。Cells(1,1)= app path & amp;" \ " & ampApp。EXEName & amp".將該EXE的完整路徑存儲在工作表單元格中。
Xlsheet。Cells (2,1) = xltmppath '將此EXE運行生成的XLS臨時文件路徑保存在工作表單元格中' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
XlApp。“Visible = True”將EXCEL設置為可見。
' Set xlApp = Nothing '釋放xlApp對象。
停止時間= 0
我。定時器1。Enabled = True '開始計時。
末端接頭
私有函數get tempfile () as string '用於生成系統臨時文件名。
暗淡無光壹樣長
Dim strBuffer為字符串,strTempPath為字符串
strBuffer = String$(MAX_PATH,0)
ln gret = GetTempPath(Len(strBuffer),strBuffer)
如果lngRet = 0,則
退出功能
strTempPath = Left$(strBuffer,lngRet)
strBuffer = String$(MAX_PATH,0)
ln gret = GetTempFileName(strTempPath," tmp ",0 & ampstrBuffer)
如果lngRet = 0,則
退出功能
lngRet = InStr(1,strBuffer,Chr(0))
如果lngRet & gt0然後GetTempFile = Left$(strBuffer,lngRet - 1)
Else: GetTempFile = strBuffer
如果…就會結束
結束功能
私有子定時器1_Timer()
出錯時繼續下壹步
If命令()& lt& gt”“那麽
如果VBA。dir(Command())& lt;& gt”“那麽
Kill Command()'刪除這次運行留下的臨時XLS文件。
否則:結束
如果…就會結束
其他
停止時間=停止時間+1 '定時累計
如果停止時間= 1,則
卸載我:結束' 2秒後,自動關閉並退出。
如果…就會結束
末端接頭
在ThisWorkBook代碼區域的開頭添加以下代碼:
private const EXE _ size = 81920 '這裏的數字是前面第7步得到的EXE文件中的字節數。
私有類型文件部分
Bytes()作為字節
結束類型
將下面的代碼添加到Workbook_BeforeClose事件中(原代碼可以保留):
' Dim myfile As FileSection '定義變量。
Dim comc,exec,xlsc作為字符串定義的變量。
申請。Visible = False '隱藏EXCEL主窗口。
exec =工作表(“臨時”)。單元格(1,1)。價值
xlsc =工作表(“臨時”)。單元格(2,1)。價值
執行& amp”& ampxlsc
打開EXEc For Binary As #1 '以打開exe文件。
ReDim myfile。字節(1到EXE_SIZE)
Get # 1,1,myfile.bytes '獲取固有文件頭。
關閉#1
如果VBA。dir(exec)& lt;& gt”“那就殺了exec
Open EXEc For Binary As #1 '生成壹個新的exe文件。
放# 1,1,myfile。“字節”首先被寫入文件頭。
打開xlsc二進制As #2 '打開xls臨時文件。
ReDim myfile。字節(1到FileLen(xlsc))
獲取#2,1,我的文件。字節
放# 1,EXE _ SIZE+1,myfile。bytes '將xls部分追加到EXE。
關閉#1
關閉#2
申請。退出外殼
'刪除臨時xls文件。
3.保存文檔,退出並關閉EXCEL。(提示:XLS文檔不應該在open事件中顯示start窗體,但是在close事件中,最好添加壹個詢問用戶是否保存的語句。)