excelvba

How to convert 32 bit VBA code into 64 bit VBA code


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

Solution

  • 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 Long
    
    Private Declare PtrSafe Function AccessibleObjectFromWindow Lib "oleacc" _
      (ByVal Hwnd As LongPtr, ByVal dwId As Long, ByRef riid As GUID, _
      ByRef ppvObject As Object) As Long
    

    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
    

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