升级前提是要有一个服务器或者直链下载空间,用于存放新版本URL直链的xlsm宏文件和网络版本号.txt

思路:1,新版本URL直链的xlsm宏文件和网络版本号.txt放到服务器上或者直链下载空间里。

2,新版本URL直链的xlsm宏文件用一个不常用单元格用于存放新版本号,比如Sheets(3).[a10000]写入:V1.0,这个版本号必须和网络版本号.txt里面的一致,以便多个版本比对更新。

4,先到服务器上或者直链下载空间里打开网络版本号.txt,更改最新版本号,并同步把这个版本号写入新版本URL直链的xlsm宏文件的Sheets(3).[a10000]中

5,本地启动工作薄后在workbookopen事件中,先下载网络版本号.txt,取出最新版本号,后和旧版本的Sheets(3).[a10000]里面的版本号作对比,下载新版本URL直链的xlsm宏文件,旧xlsm宏文件销毁自身,实现更新。

具体实现代码

'下载和清空缓存api函数申明
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szExtName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Private Declare Function DeleteUrlCacheEntry Lib "wininet" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long
Public Sub 升级主程序()
Dim e, h As IntegerDim fso As FileSystemObjectSet fso = CreateObject("Scripting.FileSystemObject")'--------------------------------------------------------------------------------------------------------------------------删除上次下载的相关文件If fso.FileExists(Application.DefaultFilePath & "\网络版本号.txt") = True Then '删除之前的网络版本号fso.DeleteFile Application.DefaultFilePath & "\网络版本号.txt", TrueEnd IfSet fso = Nothing'---------------------------------------------------------------------------------------------------------------------------Dim a As IntegerDim strURL As StringDim strPath As StringDim intRetVal As IntegerOn Error Resume Next'-------------------------------------------------下载网络版本号strURL = "http://f.travelly.store:9999/1/dwlde123/%E5%B9%BC%E5%84%BF%E5%9B%AD%E7%BD%91%E7%BB%9C%E7%89%88%E6%9C%AC%E5%8F%B7.txt" '网络文件位置strPath = Application.DefaultFilePath & "\网络版本号.txt" '本地文件位置intRetVal = URLDownloadToFile(0, strURL, strPath, 0, 0) '下载DeleteUrlCacheEntry (strURL) '清空缓存'--------------------------------------------------------------------------------判断网络版本号是否下载完成For e = 1 To 10Application.Wait (Now + TimeValue("0:00:01")) '每隔1秒判断一次下载是否完成Dim fso1 As FileSystemObjectSet fso1 = CreateObject("Scripting.FileSystemObject")If fso1.FileExists(Application.DefaultFilePath & "\网络版本号.txt") = True Then '如果网络版本号下载下来了,就跳出循环往下执行Set fso1 = NothingExit ForEnd Ifh = h + 1 '累计下载用时Next eDim fso2 As FileSystemObjectSet fso2 = CreateObject("Scripting.FileSystemObject")If h > 9 And fso2.FileExists(Application.DefaultFilePath & "\网络版本号.txt") = False Then '如果10秒后网络版本号还未下载下来,提示用户检查网络是否畅通MsgBox "你的电脑网络不通,请关闭文件后检查网络,本程序需联网运行!请让电脑联网,否则将得不到最新版而影响数据准确"Set fso2 = NothingExit SubEnd If'-----------------------------------判断网络版本号与本地版本号是否一致bendi = ThisWorkbook.Sheets(3).[a50].Value '得到本地版本号Open Application.DefaultFilePath & "\网络版本号.txt" For Input As #3Input #3, wangluo '得到网络版本号Close #3
If bendi <> wangluo Then '如果本地版本号和网络版本号不一致,就要下载升级文件进行下载MsgBox "发现新版本,点确定开始升级"On Error GoTo 102'---------------------------升级文件下载strURL = "http://f.travelly.store:9999/1/dwlde123/%E5%B9%BC%E5%84%BF%E5%9B%AD%E6%95%B0%E6%8D%AE%E7%94%9F%E6%88%90.xlsm"strPath = Application.DefaultFilePath & "\自动化.xlsm"intRetVal = URLDownloadToFile(0, strURL, strPath, 0, 0)DeleteUrlCacheEntry (strURL) '清空缓存'--------------------------------------------------------------------------------判断升级文件是否下载完成
102:For e = 1 To 80Application.Wait (Now + TimeValue("0:00:01")) '每隔1秒判断一次下载是否完成Dim fso3 As FileSystemObjectSet fso3 = CreateObject("Scripting.FileSystemObject")If fso3.FileExists(Application.DefaultFilePath & "\自动化.xlsm") = True Then  '如果升级文件下载下来了调用更新模块Set fso3 = NothingDim s As Strings = Year(Now) & Month(Now) & Day(Now) & Hour(Now) & Minute(Now) & Second(Now)Name Application.DefaultFilePath & "\自动化.xlsm" As Application.DefaultFilePath & "\自动化" & s & ".xlsm" '移动文件fso2.MoveFile Application.DefaultFilePath & "\自动化" & s & ".xlsm", ThisWorkbook.Path & "\"更新模块 '调用模块销毁自身Exit SubEnd Ifh = h + 1 '累计下载用时Next eIf h > 78 Then '如果58秒后未下载下来,提示用户检查网络是否畅通MsgBox "你的电脑网络不通,请关闭文件后检查网络,本程序需联网运行!请让电脑联网,否则将得不到最新版而影响数据准确"Exit SubEnd IfEnd If
End Sub
Public Sub 更新模块()'销毁自身模块
On Error Resume Next
MsgBox "升级成功,请在当前文件夹寻找新版本"
With ThisWorkbook '销毁自身
.Saved = True
.ChangeFileAccess xlReadOnlyKill .FullName
.Close
End With
End Sub

VBA程序升级,vba在线更新相关推荐

  1. zemax 宏怎么编写数组_编写Excel VBA程序的10个技巧

    学习Excel技术,关注微信公众号: excelperfect 学会一些有趣的技巧或想法,能够有效地提高ExcelVBA编程水平.下面是chandoo.org总结的编写Excel VBA程序的10个技 ...

  2. vba宏语言_三分钟了解Excel的程序语言VBA

    VBA全称为Visual Basic for Applications是一种宏语言,是MicrsoftOffice软件的扩展的应用程序功能. 作为一种计算机语言,VBA的内容是以代码的形式存在的. V ...

  3. VBA如何打开html文件6,VBA程序中如何自动打开网页

    大家好,我们今日继续讲解VBA代码解决方案的第83讲内容:如何利用代码让VBA程序打开指定的网页.现代的社会对于网络的依赖是前所未有的,那么,有么有办法让VBA代码可以打开指定的网页呢?当然可以. 今 ...

  4. vba程序的vb6封装_调试VBA和VB6应用程序

    vba程序的vb6封装 The debugging module can be accessed by way of the Debug menu item. That menu item can n ...

  5. select vba 网页 翻页_通过VBA程序来实现Excel表格翻页的方法

    在查看拥有较多数据的Excel工作表时,可以通过按"PageUp"或"PageDown"键(或拖动程序窗口左侧滚动条上的滑块)来进行翻页操作.实际上,用户还可以 ...

  6. c语言运行excel中vba程序,VBA代码在WPS上可运行,在EXCEL中报错

    本人是一名VBA爱好者兼VBA小白,因工作需要,最近想要做1个EXCEL模板,通过VBA代码自动调用浏览器下载数据,导入EXCEL中进行处理.但在编写VBA代码过程中发现,同样的代码在WPS中可以运行 ...

  7. EXCEL2003版无法运行2007以上版本VBA程序

    (1)EXCEL2003版打开07版EXCEL文件或运行2007版的VBA程序,要先安装2007OFFICE兼容包; (2)我平常使用2003版的,有一次在网友发来的2007版EXCEL文件上帮他编制 ...

  8. ExcelVBA从入门到精通——(1)实现第一个VBA程序

    VBA简介&用途 Visual Basic for Applications(VBA),是依附在应用程序(例如Excel)中的VB语言.只要你安装了Office Excel就自动默认安装了VB ...

  9. Excel 编写第一个简单的VBA程序

    摘要: 该文为想要学习VBA编程的会计和编程同学有使用VBA实现Excel自动化处理和一定的个性化定制Excel操作提供参考 第一篇为::VBA简单语法 第二篇为: Excel 编写第一个简单的VBA ...

最新文章

  1. 假期充电!20世纪最优秀的物理学家费曼是如何生活、学习和思考的?
  2. 用英语说中国 IOS APP 上线
  3. 青岛互联网java开发_为什么说Java是过去未来的互联网编程(上)
  4. socket编程为什么要选择AF_INET?
  5. postman安装路径_OpenStack Swift 安装及使用
  6. zoj 3511 Cake Robbery(线段树)
  7. java三大框架实现任务调度——IRemindService
  8. CakePHP 中文手册
  9. C++11 新特性整理(2)
  10. 5G与IoT将成为IPv6强大驱动力
  11. SourceTree 密码填写正确但是拉取显示密码错误解决
  12. 手机射频工程师培训大纲
  13. lower_bound 、upper_bound 、binary_search
  14. 华为鸿蒙鲲鹏麒麟凌霄,华为麒麟、凌霄、鸿鹄三大芯片有什么区别?
  15. 白泽六足机器人导航贴(开源)
  16. SteamVR手柄震动控制实现
  17. 杂谈---名言警句记录
  18. 马自达生产调整-日本广岛经济面临危机!
  19. android的环境搭建
  20. julia:字符串(完结)

热门文章

  1. 列出叶节点 python
  2. 计算机网络设备的运行温度,计算机机房控制温度与湿度方法
  3. android调用高德地图接口,调用高德地图Api
  4. SQL50题(MySQL)
  5. 交叉编译使用 hostapd-2.0 在开发板上开机自启动无线网卡 AP 功能
  6. 按键精灵打卡怎么写_按键精灵手机版定时点击脚本
  7. Spectacle源码及分析1 —— 源码概览
  8. php7生命周期,PHP 的生命周期与模块的sapi 原理
  9. 网站制作从原型图架构到设计开发的具体步骤
  10. 如何提取ppt模板?