當前位置:編程學習大全網 - 源碼下載 - EXCEL中的VB宏可以封裝成EXE文件嗎?

EXCEL中的VB宏可以封裝成EXE文件嗎?

1.用VB做EXE文件1的頭部分,打開VB,“文件”-“新建項目”-“標準EXE”;_

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事件中,最好添加壹個詢問用戶是否保存的語句。)

  • 上一篇:ecshop怎麽操作團購活動
  • 下一篇:跨城券可以在上虞使用嗎?
  • copyright 2024編程學習大全網