Bodhi
Bodhi

Reputation: 548

How to make VBA code compatible with 64-bit Excel?

I have an excel running with VB code and it seems fine with 32 version and now when I tested in office 2016 it gives the below error

The code in this project must be updated for use on 64-bit systems

Since I am not good in vb I have issues with updating the code. This is my code below and how to update it for the 64-bit compatibility,

Declare Function GetSystemDirectory Lib "kernel64" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
'a  íÌÈ Ãí íßæä åäÇß ÌÏæá Úáì ÞÇÚÏÉ ÇáãÚáæãÇÊ ÈÅÓã
'a QtrDate
Global G_SystemPath As String

Function L_FileExist(L_FName As String) As Boolean
'a chick if the file given is found or not
'a input File Name
'a Output
'a   True : if found
'a   False : if not found
   L_FileExist = Not (Trim(Dir(L_FName)) = "")
End Function
Public Function GetWindowsSysDir() As String
    Dim strBuf As String
    strBuf = Space$(250)
    If GetSystemDirectory(strBuf, 250) Then
        GetWindowsSysDir = StringFromBuffer(strBuf)
        AddDirSep GetWindowsSysDir
    End If
End Function

Public Function StringFromBuffer(Buffer As String) As String
    Dim nPos As Long
    nPos = InStr(Buffer, vbNullChar)
    If nPos > 0 Then
        StringFromBuffer = Left$(Buffer, nPos - 1)
    Else
        StringFromBuffer = Buffer
    End If
End Function

Public Sub AddDirSep(strPathName As String)
    strPathName = RTrim$(strPathName)
    If Right$(strPathName, 1) <> "\" Then
        strPathName = strPathName & "\"

    End If
End Sub


Sub L_Secrit()
G_SystemPath = GetWindowsSysDir
If L_FileExist(G_SystemPath & "MSAYAR.DLL") Then
    Sheet1.Cells(400, 2) = " "
    Sheet1.Cells(401, 2) = " "
    Sheet1.Cells(402, 2) = " "

Upvotes: 1

Views: 6180

Answers (1)

Pᴇʜ
Pᴇʜ

Reputation: 57673

The first line should be

#if VBA7 then
   Declare PtrSafe Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
#else
   Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
#end if

Here is a nice resource to find 64bit Win32API calls.

Upvotes: 3

Related Questions