如何将 32 位 VBA 代码转换为 64 位 VBA 代码 [英] How to convert 32 bit VBA code into 64 bit VBA code

查看:106
本文介绍了如何将 32 位 VBA 代码转换为 64 位 VBA 代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试运行宏代码,但由于我使用的是 64 位 Excel 2016,此代码不起作用.请帮我解决这个问题.

Im trying to run a macro code but since I'm using a 64 bit Excel 2016 this code is not working. Please help me how to fix this.

Private Declare Function FindWindowEx Lib "User32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long

Private Declare Function IIDFromString Lib "ole32" _
(ByVal lpsz As Long, ByRef lpiid As GUID) As Long

Private Declare Function AccessibleObjectFromWindow Lib "oleacc" _
(ByVal hWnd As Long, ByVal dwId As Long, ByRef riid As GUID, _
ByRef ppvObject As Object) As Long

推荐答案

这些应该适用于 64 位 Excel

These should work on 64 bit Excel

Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
  (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, _
  ByVal lpsz2 As String) As LongPtr

Private Declare PtrSafe Function IIDFromString Lib "ole32" _
  (ByVal lpsz As LongPtr, ByRef lpiid As GUID) As LongPtr

Private Declare PtrSafe Function AccessibleObjectFromWindow Lib "oleacc" _
  (ByVal Hwnd As LongPtr, ByVal dwId As LongPtr, ByRef riid As GUID, _
  ByRef ppvObject As Object) As LongPtr

如果您需要它在两者上运行,您可以使用以下 #If VBA7

If you need it to run on both you can use the following #If VBA7

#If VBA7 Then
    '64 bit declares here
#Else
    '32 bit declares here
#End If

PtrSafe Win32 API 声明的一个很好的资源可以在这里找到:Win32API_PtrSafe.txt

A nice resource for PtrSafe Win32 API declares can be found here: Win32API_PtrSafe.txt

我不太确定 IIDFromStringAccessibleObjectFromWindow 但我认为它们应该是 subs 而不是 functions.而 lpsz 应该是 String 如下.也许有人可以证实这一点?

I'm not quite sure about the IIDFromString and AccessibleObjectFromWindow but I think they should be subs instead of functions. And lpsz should be String like below. Maybe anyone can confirm this?

Private Declare PtrSafe Sub IIDFromString Lib "ole32" ( _
  ByVal lpsz As String, ByRef lpiid As GUID)

Private Declare PtrSafe Sub AccessibleObjectFromWindow Lib "oleacc" _
  (ByVal Hwnd As LongPtr, ByVal dwId As LongPtr, ByRef riid As GUID, _
  ByRef ppvObject As Object)

这篇关于如何将 32 位 VBA 代码转换为 64 位 VBA 代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆