ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] VBA程序也玩自动升级

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-1-10 23:03 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:VBE环境开发
最近用VBA帮公司其他部门的同事写了一个数据管理的小工具,让他们以前每天要花1、2个钟头处理的工作现在10几分钟就搞定,还不容易出错,博得不少喝彩
终于,这些个家伙们提出越来越多新的要求,一会要求导出的报表增加这个项目,一会要求增加那个功能。倒是难不倒咱,很快修改了窗体代码,然而他们却连导入窗体都不会操作,还得跑到他们电脑前去(办公室可不在一起呀 )一次两次就算了,可却经常发生,又不好意思拒绝
几经尝试,终于找到了一个解决办法:
为了好看,也为了防止误操作,所有他们可见的界面都是窗体,每次要求修改的东西也都是通过修改窗体代码完成的,那么,在工具上加上个自动升级功能,每次我写好新窗体后,导出到共享盘上,文件自动查找有没有新窗体文件存在,有,则先删除原来的窗体,再导入新窗体(要求同名),不就搞定了吗?
不多说了,上代码:
Sub 升级()
Application.ScreenUpdating = False
On Error Resume Next
  Dim pw$
'因为要用代码操作窗体需要先解开VBA工程密码(无密码就不用了),先解开:
  pw = "1234" 'VBA工程密码
  If ThisWorkbook.VBProject.Protection = vbext_pp_locked Then
    Application.VBE.CommandBars(1).Controls("工具(T)").Controls("VBAProject 属性(&E)...").Execute
    Application.SendKeys pw & "{ENTER}{ENTER}"
    DoEvents
  End If

'还要求工具(T)-宏(M)-安全性(M)-可靠发行商(T)-勾选了“信任对于VB项目的访问(V),就别手工了,自动来:
  Dim Chgset As Boolean
  '陷阱测试,VBProject.Protection在这儿并无实际的意义
  Debug.Print ThisWorkbook.VBProject.Protection
  If Err.Number = 1004 Then
    Err.Clear
    Application.SendKeys "%TMS%T%V{ENTER}"
Chgset = True
DoEvents
  End If
  '执行升级操作:
Dim vbCmp As VBComponent
Dim fname As String
  For Each vbCmp In ThisWorkbook.VBProject.VBComponents
    If vbCmp.Type = vbext_ct_MSForm Then 'ThisWorkbook.VBProject.VBComponents.Remove vbCmp
    fname = vbCmp.Name
    If Dir("共享路径\" & fname & ".frm") <> "" Then
    Application.VBE.ActiveVBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents(fname)
    Application.VBE.ActiveVBProject.VBComponents.Import " 共享路径\"  & fname & ".frm"
    End If
    End If
  Next vbCmp
  MsgBox "升级完成"
  
  '操作完成后还原操作前的状态
Application.ScreenUpdating = True
If Chgset Then Application.SendKeys "%TMS%T%V{ENTER}"
End Sub

当然了,这里是直接开始升级了,如果需要,加上个升级文件是否存在的判断也行。

评分

4

查看全部评分

头像被屏蔽

TA的精华主题

TA的得分主题

发表于 2009-1-10 23:38 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

TA的精华主题

TA的得分主题

发表于 2009-1-11 13:04 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-1-11 13:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
比较新颖的思路。收藏了

TA的精华主题

TA的得分主题

发表于 2009-1-11 14:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
有点意思,作个记号
还要引用什么呢?

[ 本帖最后由 sunsoncheng 于 2009-1-11 14:22 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-1-11 14:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
新颖  赞一个先

TA的精华主题

TA的得分主题

发表于 2009-3-15 23:29 | 显示全部楼层
标记的地方是用于共享的,共享升级,就像杀毒软件的网络升级一样,扩展无极限,思路很好。

TA的精华主题

TA的得分主题

发表于 2009-3-16 10:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这样也行啊..呵呵..厉害..看有没有机会用上..谢谢分享

TA的精华主题

TA的得分主题

发表于 2009-3-16 14:43 | 显示全部楼层
好资料顶起
让更多的人能看到!~~

TA的精华主题

TA的得分主题

发表于 2009-3-16 14:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
不错,向你学习!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-28 21:34 , Processed in 0.033706 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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