VBA 32位代码适配64位

     很久前用 Access VBA 写个程序,在64位的 Office 下一直报错,遂一直用 32位的 Office。最近尝试安装了 Office 2021,看到那图标那界面顿时爱了。一时没有找到 32位 的 Office 2021,遂决定解决代码的适配问题,好一劳永逸。

1)在操作具体模块时,弹出“Microsoft Visual Basic for Applications”窗口,报:

     隐藏的模块中的编译错误:mod_openFile。
     此错误通常会在代码与此应用程序的版本、平台或基础结构不兼容时发生。单击“帮助”以获取如何更正此错逞的信息。


2)进入名称为“mod_openFile”模块(个人自定义的),相关代码红色显示(32位 Office正常),报:

      编译错误:
      若要在64位系统上使用,则必须更新此项目中的代码。请检查并更新 Declare 语句,然后用 PtrSafe 属性标记它们。

3)解决方法确实很简单,只需在 Declare 后加上 PtrSafe即可

'原代码段
    Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    Public Declare Function SetCursor Lib "user32" (ByVal hCursor As Long) As Long
    Public Declare Function LoadCursorByNum Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
'更新后代码段
    Public Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    Public Declare PtrSafe Function SetCursor Lib "user32" (ByVal hCursor As Long) As Long
    Public Declare PtrSafe Function LoadCursorByNum Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VBA是一种用于编写宏和自动化任务的编程语言。在32位系统下,VBA运行正常,但在64位系统下可能会遇到异常报错的问题。 造成这种异常报错的主要原因是VBA代码在进行指针操作时,使用了32位系统下的指针大小,而在64位系统下,指针大小会发生变化。因此,VBA代码中依赖于指针大小的操作可能无法正常运行。 另外,由于64位系统具有更大的内存空间,因此可能会导致运行时内存溢出的问题。在32位系统下,VBA代码能够充分利用系统的内存资源,但在64位系统下,代码需要更多的内存空间,如果没有进行适当的优化,可能会导致内存溢出,并触发异常报错。 为了解决这个问题,可以采取以下步骤: 1. 检查VBA代码中是否使用了指针相关的操作,如果有,需要对代码进行修正,适配64位系统下的指针大小。 2. 在64位系统下,要注意代码中对于内存的使用情况,避免出现内存溢出问题。可以考虑使用更高效的算法或减少内存占用的方式进行优化。 3. 如果遇到无法解决的异常报错问题,可以尝试使用32位版本的Office软件,在64位系统上安装32位版本的Office可以解决某些兼容性问题。 总之,VBA32位系统下运行正常,在64位系统下可能会出现异常报错问题,主要原因是指针大小的变化和内存使用的差异。通过修正代码和优化内存使用,可以解决大部分的异常报错情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值