ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] office 64位 代码求高手老师指点

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-5-7 00:16 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
各位高手:之前在网上搜到的VBA代码office 32位版本可以正常运行,但安装了64位版本后,出现代码不兼容,在网上找了很多帖子,也修改了诸如加ptrsafe,将long改为longPtr等方式,修改后的代码可以运行,但运行后有密码的VBe无法打开了,只要双击VBE输密码就会自动关闭文件,恳请路过的大师指点一下,不胜感激!工作薄密码1234

工作簿2.zip

15.25 KB, 下载次数: 14

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-7 12:11 | 显示全部楼层
MoveMemory ByVal pFunc, ByVal VarPtr(HookBytes(0)), 6  运行这句代码后加密了的vbaproject就出问题打不开了,请各路
  1. Public Function Hook() As Boolean
  2.     Dim TmpBytes(0 To 5) As Byte
  3.     Dim p As LongLong
  4.     Dim OriginProtect As LongLong
  5.     Hook = False
  6.     pFunc = GetProcAddress(GetModuleHandleA("user32.dll"), "DialogBoxParamA")
  7.     If VirtualProtect(ByVal pFunc, 6, &H40, OriginProtect) <> 0 Then
  8.         MoveMemory ByVal VarPtr(TmpBytes(0)), ByVal pFunc, 6
  9.         If TmpBytes(0) <> &H68 Then
  10.             MoveMemory ByVal VarPtr(OriginBytes(0)), ByVal pFunc, 6
  11.             p = GetPtr(AddressOf MyDialogBoxParam)
  12.             HookBytes(0) = &H68
  13.             MoveMemory ByVal VarPtr(HookBytes(1)), ByVal VarPtr(p), 4
  14.             HookBytes(5) = &HC3
  15.             MoveMemory ByVal pFunc, ByVal VarPtr(HookBytes(0)), 6
  16.             Flag = True
  17.             Hook = True
  18.         End If
  19.     End If
  20. End Function
复制代码
大师指点。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-10 18:50 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-5-11 10:16 | 显示全部楼层
If RecoverBytes Then MsgBox "恢复成功"
此种情况 RecoverBytes 应该是一个函数名  返回一个boolean
或者应写成 If 公共变量X=true Then MsgBox "恢复成功"
RecoverBytes 过程会改变: 公共变量X 的值

1.jpg

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-15 10:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
首先感谢大师的帮助。这种写法在32位office是可以使用的,刚才我按照大师的指点加了一个判断为true,还是一样,但是另外再设置一个公共变量我就不知道怎么设了,不知道大师可否测试一下代码成功后帖出来?谢谢了!

TA的精华主题

TA的得分主题

发表于 2023-5-15 11:38 | 显示全部楼层
32位和64位的  恢复  我这里都一样

我只是从代码看  不知道如何测试

TA的精华主题

TA的得分主题

发表于 2023-5-15 13:26 | 显示全部楼层
最笨的方法是:将高版本Excel 文档另存为低版本Excel 文档,再调用32位 VBA代码,完成后,再另存为高版本

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-17 08:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
huarong7984 发表于 2023-5-15 13:26
最笨的方法是:将高版本Excel 文档另存为低版本Excel 文档,再调用32位 VBA代码,完成后,再另存为高版本

除非重装office才行,版本高低应该是改变不了应用程序位数的
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 10:20 , Processed in 0.047147 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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