为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

EXCEL-VBA文件封装成EXE的方法

2020-10-14 1页 doc 13KB 56阅读

用户头像 个人认证

未若柳絮因风起

多多学习,共同进步

举报
EXCEL-VBA文件封装成EXE的方法EXCELVBA文件封装成EXE的方法XLS封装成EXE制作全攻略■ldhyob  写出此文以帮助关注那张帖的版友们能完全自已独立完成xls2exe的过程,实现简单的封装。首先申明,将xls做成exe并不是指就能使您的VBA工程受到坚强的保护,当然您可以通过数种方法来提高xls文档VBA工程防止查看的保护几率,如屏蔽一些系统热键、监控VBE窗口的开启、给文档加上口令保护、加VBA口令、使VBA“不可查看”、利用宏表来禁止用户取消宏来查看文档等等,但“道高一尺,魔高一丈&r...
EXCEL-VBA文件封装成EXE的方法
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文件,这就是封装成品了,你可以将其重命名为所需要的名称。    好了,大功告成!
/
本文档为【EXCEL-VBA文件封装成EXE的方法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索