EXCELVBA文件封装成EXE的方法XLS封装成EXE制作全攻略■ldhyob 写出此文以帮助关注那张帖的版友们能完全自已独立完成xls2exe的过程,实现简单的封装。首先申明,将xls做成exe并不是指就能使您的VBA工程受到坚强的保护,当然您可以通过数种方法来提高xls文档VBA工程防止查看的保护几率,如屏蔽一些系统热键、监控VBE窗口的开启、给文档加上口令保护、加VBA口令、使VBA“不可查看”、利用宏
来禁止用户取消宏来查看文档等等,但“道高一尺,魔高一丈”,所以就没有必要去追求所谓的“完美”加密……关于这些保护方法不属本文叙述范围,请版友在论坛上查看相关帖。 假如您手头已有一xls文档等待封装,假如您机子上已安装有VB6开发系统,那么请跟着往下操作: 一、用VB制作EXE文件头部分 1、打开VB,“文件”-“新建工程”-“
EXE”; 2、此时会出现名为Form1的默认窗体编辑窗口,Form1将作为软件启动封面窗体,打开该Form1的属性窗口,对如下属性进行设置:BorderStyle=0,StartUpPosition=2,Icon与Picture属性设置成你需要的图标(这也将成为你EXE的图标)和设计好准备使用的图片(即软件封面),窗体的大小设置成您需要的合适值即可。 3、往窗体中添加一个时钟控件timer1,并将其InterVal属性设为1000。 4、双击窗体打开代码编辑窗口,录入以下代码:PrivateDeclareFunctionSetWindowPosLib"user32"(ByValhwndAsLong,ByValhWndInsertAfterAsLong,ByValxAsLong,ByValyAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsAsLong)AsLongPrivateDeclareFunctionGetTempFileNameLib"kernel32"Alias"GetTempFileNameA"(ByVallpszPathAsString,ByVallpPrefixStringAsString,ByValwUniqueAsLong,ByVallpTempFileNameAsString)AsLongPrivateDeclareFunctionGetTempPathLib"kernel32"Alias"GetTempPathA"(ByValnBufferLengthAsLong,ByVallpBufferAsString)AsLongPrivateConstMAX_PATH=260PrivateConstEXE_SIZE=81920'本EXE实际字节大小PrivateTypeFileSection Bytes()AsByteEndTypePrivateTypeSectionedFile Files()AsFileSectionEndTypeDimStopTimeAsIntegerPrivateSubForm_Activate()IfCommand()=""ThenMain1EndSubPrivateSubForm_Load()OnErrorResumeNextIfCommand()=""Then =True SetWindowPos,-1,0,0,0,0,&H2Or&H1'将封面置为最顶层窗体Else =False =TrueEndIfEndSubSubMain1()DimStartXLSByte,I,JAsLongDimAppPath,XlsTmpPathAsStringDimmyfileAsSectionedFileDimxlAppAs'定义EXCEL类DimxlBookAs'定义工件簿类DimxlsheetAs'定义工作表类AppPath=XlsTmpPath=GetTempFile()'取得XLS临时文件名(带路径)If,1)="\"ThenAppPath=,-1)OpenAppPath&"\"&&".exe"ForBinaryAs#1ReDim(1)ReDim(1).Bytes(1ToLOF(1)-EXE_SIZE)OpenXlsTmpPathForBinaryAs#2 Get#1,EXE_SIZE+1,(1).Bytes'此处数字要根据EXE实际头文件大小更改设定 Put#2,1,(1).BytesClose#1Close#2SetxlApp=CreateObject("")'创建EXCEL应用类SetxlBook=password:="ldhyob")'打开EXCEL工作簿,已知该工作簿已加打开口令为ldhyob'以下星号括起部分代码是往xls里写数据(也可不往工作簿里写数据的方法,而生成txt的方法),作用是保存本exe的绝对路径与临时xls绝对路径,以便于EXE重写更新与临时文件删除'*****************************************Setxlsheet=("temp")'设置活动工作表(1,1)=AppPath&"\"&&".exe"'将该EXE完全路径存在工作表单元格内(2,1)=XlsTmpPath'将该EXE本次运行产生XLS临时文件路径存在工作表单元格内'****************************************=True'设置EXCEL可见SetxlApp=Nothing'释放xlApp对象StopTime=0=True'启动时钟EndSubPrivateFunctionGetTempFile()AsString'用来产生系统临时文件名DimlngRetAsLongDimstrBufferAsString,strTempPathAsStringstrBuffer=String$(MAX_PATH,0)lngRet=GetTempPath(Len(strBuffer),strBuffer)IflngRet=0ThenExitFunctionstrTempPath=Left$(strBuffer,lngRet)strBuffer=String$(MAX_PATH,0)lngRet=GetTempFileName(strTempPath,"tmp",0&,strBuffer)IflngRet=0ThenExitFunctionlngRet=InStr(1,strBuffer,Chr(0))IflngRet>0ThenGetTempFile=Left$(strBuffer,lngRet-1)ElseGetTempFile=strBufferEndIfEndFunctionPrivateSubTimer1_Timer()OnErrorResumeNextIfCommand()<>""Then If(Command())<>""Then KillCommand()'删除本次运行遗留的临时XLS文件 Else End EndIfElseStopTime=StopTime+1'计时累加IfStopTime=1ThenUnloadMe:End'2秒后自动关闭退出EndIfEndSub 5、可保存工程,如取名为“工程1”; 6、进行编译,“文件”-“生成工程”,此时也可将生成的EXE另外取名,如取名叫。 7、查看第6步生成的EXE文件字节大小,并将具体数字记下来,并将VB模块中的“PrivateConstEXE_SIZE=81920”保证一致(这里的81920是笔者例子的结果数字,每个人在实际时会有不同)。此例此步很重要,必须要做,该数字在xls文档VBA中还要使用到。 至此,文件头部分已做完,文件也已生成于磁盘中。 特别提示:编译前,确保VB里"工程"---"引用"里"MicrosoftExcelObjectLibrary"前面的勾已打上. 二、xls文档部分操作 1、给工作簿增加一个工作表temp,将其置为隐藏。 2、增加xls文档宏代码以实现文档关闭时EXE数据刷新。 打开xls文档,打开VBE窗口,在ThisWorkBook代码区头部加入以下代码:PrivateConstEXE_SIZE=81920'此处数字为前面第7步得到的EXE文件字节数PrivateTypeFileSection Bytes()AsByteEndType在Workbook_BeforeClose事件中加入如下代码(对原有的代码可保留): DimmyfileAsFileSection'定义变量Dimcomc,exec,xlscAsString'定义变量 =False'隐藏EXCEL主窗口 exec=WorkSheets(“temp”).cells(1,1).value xlsc=WorkSheets(“temp”).cells(2,1).value comc=exec&""&xlsc OpenexecForBinaryAs#1'打开EXE文件 ReDim(1ToEXE_SIZE) Get#1,1,'取得固有文件头 Close#1 If(exec)<>""ThenKillexec OpenexecForBinaryAs#1'生成新的EXE文件 Put#1,1,'先写入文件头 Open xlscForBinaryAs#2'打开xls临时文件 ReDim(1ToFileLen(xlsc)) Get#2,1, Put#1,EXE_SIZE+1,'将xls部分追加进EXE Close#1 Close#2 Shellcomc,vbMinimizedNoFocus‘删除临时xls文件 3、保存文档,退出,关闭EXCEL。 三、将EXE与XLS结合生成新的EXE 将第一步得到的与第二步得到的(文件名随你愿意取)放到同一目录下,切换到MS-DOS模式,或者在该目录下建立一个批处理文件即bat文件,这样就不用切换到MS-DOS模式下输入DOS命令了。建立bat文件的步骤方法是:鼠标右键“新建”—“文本文档”,输入以下内容:@echooffcopy/b+保存,更改文件名(包括扩展名)为“合并.bat”,然后双击它,不一会就会发现在当前目录下会多出一个EXE文件,这就是封装成品了,你可以将其重命名为所需要的名称。 好了,大功告成!