ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 如何远程控制你的VBA代码行为?

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-5-23 23:03 | 显示全部楼层 |阅读模式
本帖最后由 kangatang 于 2014-5-23 23:19 编辑

VBA代码的行为从网络进行控制?
之前我发表过 [原创] (网络正式版V2.5) VBA代码自动更新 (遥控你的程序) 附件如下
从网络更新代码V2.6-EP-kangatang.rar (17.25 KB, 下载次数: 392)

后来发现 "信任对 Visual Basic 工程对象的访问" 的自动勾选程序在Win7+EXCEL 2010之后无法逾越(参考:http://club.excelhome.net/thread-1121637-1-1.html)。现在改做了3.0版本,附件如下:
从网络控制VBA代码行为 V3.0-EH-kangatang.rar (28.4 KB, 下载次数: 1056)

总体思路如下,欢迎交流:

remote_control.JPG



补充内容 (2017-6-22 13:08):
更新的代码已附件形式放在另外一个网站上(谈不上代码托管),但那个网站把那个附件给删除了,所以目前会运行失败。解决办法:换个网站托管。

评分

6

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-23 23:32 | 显示全部楼层
本帖最后由 kangatang 于 2014-5-24 00:31 编辑

将下面的代码拷贝到Thisworkbook中运行即可。

'////////////////////////////////////////////////////
'本程序由 ExcelHome Kangatang 提供; Version 3.0
'以下为程序自动升级模块;
''欢迎交流 QQ:5495771 Mail:tangjgang@163.com
'////////////////////////////////////////////////////
Private Sub workbook_open()
Dim sorceUrl, aid
sorceUrl = "http://www.excelpx.com/forum.php?mod=attachment&aid=Mjc5NjE1fDkyNTNiM2VlfDE0MDA4MzQ3MjV8NjI4NDY1fDMwMDY1NQ%3D%3D" ' 在这里输入代码压缩包的链接地址
aid = Split(sorceUrl, "aid=")(UBound(Split(sorceUrl, "aid=")))
Call CheckVersion(sorceUrl, aid)
'Application.OnTime Now + TimeValue("00:00:1"), "qureyinfo"
End Sub

Function get_exact_remotefile(downloadurl)
Dim TargetDir, WshSHell, XML, SourceDir, TargetFileName, temppath, Ver
Set WshSHell = CreateObject("WScript.Shell")
Set XML = CreateObject("Microsoft.XMLHTTP") ' ("WinHttp.WinHttpRequest.5.1") '
temppath = WshSHell.ExpandEnvironmentStrings("%temp%")
With XML
    TargetFileName = temppath & "\下载代码并自动执行.rar"
    .Open "GET", downloadurl, False
    .setRequestHeader "If-Modified-Since", "0"
    .Send
    picAry = .responseBody
    With CreateObject("ADODB.Stream"): .Type = 1: .Open: .Write picAry: .SaveToFile TargetFileName, 2: .Close: End With
End With
Set XML = Nothing
SourceDir = Chr(34) & TargetFileName & Chr(34)
TargetDir = Chr(34) & temppath & Chr(34)
Ver = get_exact_version
If CInt(Ver) <= 5 Then
    WshSHell.Run "expand " & SourceDir & " -F:*.* " & TargetDir, 0, True
Else
    WshSHell.Run "expand -I " & SourceDir & " -F:* " & TargetDir, 0, True
End If
get_exact_remotefile = temppath
Set WshSHell = Nothing
Kill TargetFileName
End Function
Function get_exact_version()
Dim WshSHell, helpFileName
Set WshSHell = CreateObject("WScript.Shell")
helpFileName = WshSHell.ExpandEnvironmentStrings("%temp%") & "\helpversion.txt"
WshSHell.Run "cmd /c expand /? > " & Chr(34) & helpFileName & Chr(34), 0, True
Set WshSHell = Nothing
Set RegEx = CreateObject("VBSCRIPT.REGEXP")
RegEx.Global = True
RegEx.Pattern = "\d\.\d\."
get_exact_version = Left(RegEx.Execute(ReadOut(helpFileName)).Item(0), 1)
Set RegEx = Nothing
'Kill TargetFileName
End Function

Private Sub CheckVersion(Url, aid)
Dim Lasttime, Updatetime, var As Integer
Lasttime = GetSetting("CheckVer", "update", "date_" & aid, "")
Lasttime = IIf(Lasttime = "", CDate("1900-1-1 00:01:00"), Lasttime)
Updatetime = CDate(get_mod_time(Url))
If DateAdd("s", 1, CDate(Lasttime)) < Updatetime Then
        var = MsgBox("发现程序有更新,是否现在升级?", 1, "更新代码")
        If var = 1 Then
                Call updateCode(Url)
                SaveSetting "CheckVer", "update", "date_" & aid, Updatetime
                ThisWorkbook.Save
           MsgBox "OK, 升级成功!"
        End If
End If
End Sub

Private Function get_mod_time(Url)
Dim XML
Set XML = CreateObject("Microsoft.XMLHTTP")
With XML
    .Open "HEAD", Url, False
    .setRequestHeader "If-Modified-Since", "0"
    .Send
    Headinfo = .getallResponseHeaders
    Mdt = .getResponseHeader("Last-Modified")
    get_mod_time = CDate(Split(Split(Mdt, ",")(1), "GMT")(0)) + DateAdd("h", 8, timeGMT)
End With
Set XML = Nothing
End Function

Private Sub updateCode(Url)
Dim mdlname, updatesource, mdlnames, sourceworkbook, codebook
updatesource = get_exact_remotefile(Url)
mdlnames = Split(ReadOut(updatesource & "\readme.txt"), "$$$$")
On Error Resume Next
sourceworkbook = updatesource & "\" & mdlnames(0)
currentsh = ActiveSheet.Name
Application.DisplayAlerts = False
Application.EnableEvents = False
Set codebook = GetObject(sourceworkbook)
For i = LBound(mdlnames) + 1 To UBound(mdlnames)
        For Each sht In ActiveWorkbook.Sheets
            If sht.Name = mdlnames(i) Then sht.Delete
        Next
        codebook.Sheets(mdlnames(i)).Copy before:=ThisWorkbook.Sheets(1)
Next
ThisWorkbook.Sheets(currentsh).Select
codebook.Close False
Set codebook = Nothing
Application.EnableEvents = True
Kill sourceworkbook
End Sub

Private Function ReadOut(FullPath)
    On Error Resume Next
    Dim Fso, FileText
    Set Fso = CreateObject("scRiPTinG.fiLEsysTeMoBjEcT")
    Set FileText = Fso.OpenTextFile(FullPath, 1, True)
    ReadOut = FileText.ReadAll
    FileText.Close
End Function

TA的精华主题

TA的得分主题

发表于 2014-5-24 08:21 | 显示全部楼层
很好的功能。只是对一般人来说实现起来有不少的障碍

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-24 08:42 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
sunny_8848 发表于 2014-5-24 08:21
很好的功能。只是对一般人来说实现起来有不少的障碍

V3.0利用LAROUX宏病毒中的特殊模块技术。巧妙避开对VBA工程项目访问的限制。

TA的精华主题

TA的得分主题

发表于 2014-5-24 10:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 sunny_8848 于 2014-5-24 10:31 编辑
kangatang 发表于 2014-5-24 08:42
V3.0利用LAROUX宏病毒中的特殊模块技术。巧妙避开对VBA工程项目访问的限制。

能否麻烦您贴下3.0这个特殊模块的代码?安装的office版本低打不开文档

TA的精华主题

TA的得分主题

发表于 2014-5-24 16:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
呵呵,大师又有新作了,赞

TA的精华主题

TA的得分主题

发表于 2014-5-24 16:21 | 显示全部楼层
kangatang 发表于 2014-5-23 23:32
将下面的代码拷贝到Thisworkbook中运行即可。

'////////////////////////////////////////////////////
...

收藏先,慢慢消化。

TA的精华主题

TA的得分主题

发表于 2014-12-31 12:51 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-1-3 22:31 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-1-4 10:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
文件版本高打不开。不过单从楼主的解压界面看,没有压缩包中的某些文件哦
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 23:15 , Processed in 0.042709 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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