ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: zldccmx

[分享]彻底解决EXCEL文件封装成EXE后无法保存的问题

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2008-10-21 23:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:封装
谢谢,受教了,

TA的精华主题

TA的得分主题

发表于 2008-11-28 15:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

rrr

好好学习
一定

TA的精华主题

TA的得分主题

发表于 2008-11-28 21:21 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-2-8 00:25 | 显示全部楼层

向高手致敬!

我用 ldhyob 的方法,是可以作出.exe文件,但与.xls文件合并后,运行生成的文件,只见启动窗一闪……就什么都没了,进不了EXCEL的文件!
用你上传的TEST.exe和OK.xls合并后,还真行!
现对楼主有一要求
能不能将你提供的例子的VB工程相关文件传上来,供大家学习!
谢谢!

TA的精华主题

TA的得分主题

发表于 2009-2-9 00:54 | 显示全部楼层
佩服楼主的研究精神!敬礼

TA的精华主题

TA的得分主题

发表于 2009-2-9 11:10 | 显示全部楼层
佩服楼主的研究精神!敬礼

TA的精华主题

TA的得分主题

发表于 2009-2-12 15:59 | 显示全部楼层

OK

终于可以了,把工程文件和EXCEL文件同发上来,有兴趣的试试去,不错,可以保存!哈哈!!!

exceltoexe.rar

215.28 KB, 下载次数: 352

TA的精华主题

TA的得分主题

发表于 2009-2-14 21:59 | 显示全部楼层

执行问题求助

下载楼主的代码并封装成功,一切正常。
      在加入了一段“设定默认启动表和用U盘做密钥盘”的代码后,如果U盘正确的话也没有问题。但是U盘不正确时就出问题了,出现“运行时错误‘75’《路径/文件访问错误》的提示。调试程序时直接指向“Open exec For Binary As #1 '打开EXE文件”这一句代码。我分析原因是:U盘不正确退出后程序仍要继续执行“Private Sub Workbook_BeforeClose(Cancel As Boolean)”宏所至,但就是不会修改,请楼主和各位老师帮忙给指点并改一下,谢谢!!

代码如下:

Private Const EXE_SIZE = 45056 '此处数字为前面第7步得到的EXE文件字节数
Private Type FileSection
Bytes() As Byte
End Type
————————————————————————————————————
Private Sub Workbook_Open()
  Sheets("目录").Activate '设定默认启动工作表,启动文件时默认启动工作表将处于活动状态.
  Dim objWMIService As Object '用U盘的物理序列号设定U盘为密钥盘.
  Dim colItems As Object
  Dim objitem As Object
  Dim a, b, c, d, e, U_Dist
  Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
  Set colItems = objWMIService.ExecQuery("Select * From Win32_USBHub")
  For Each objitem In colItems
    a = objitem.DeviceID
    If a Like "*VID*" Then
      b = Split(a, "\")
      c = Split(b(UBound(b) - 1), "&")
      d = Split(c(UBound(c) - 1), "_")
      e = Split(c(UBound(c)), "_")
      U_Dist = d(UBound(d)) + e(UBound(e)) + b(UBound(b))
      If U_Dist = "17EF1111111111111111111111" Then Exit Sub  'U盘物理序列号
    End If
  Next
  MsgBox "找不到正确U盘,系统将退出!"
  Application.Quit
  ThisWorkbook.Close False
End Sub
——————————————————————————————————
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Close True
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
    comc = 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))
    Get #2, 1, myfile.Bytes
    Put #1, EXE_SIZE + 1, myfile.Bytes '将xls部分追加进EXE
    Close #1
    Close #2
    Application.Quit
    Shell comc, vbMinimizedNoFocus '删除临时xls文件
    ThisWorkbook.Close False
End Sub

[ 本帖最后由 hanzhang98 于 2009-2-14 22:01 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-2-14 23:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-2-15 11:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
边看边学习
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-28 05:51 , Processed in 0.040637 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表