We help IT Professionals succeed at work.

How to add PtrSafe to make this work in 64 bit

I have this part of the code which is for 32 bit Excel and my excel is 64 bit,

I tried to make this 64 bit by adding PtrSafe at the beginining of the code. it did not work for me.

can anyone please help me?

Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function ShellExecute Lib "shell32" _
    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

Open in new window

Comment
Watch Question

Zakaria AcharkiAnalyst Developer
Distinguished Expert 2018

Commented:
PtrSafe Asserts that a Declare statement is targeted for 64-bit systems. Required on 64-bits. so try to add it to the declaration like :

Private Declare PtrSafe Function GetDesktopWindow Lib "user32" () As Long
Private Declare PtrSafe Function ShellExecute Lib "shell32" 

Open in new window


For both version you could use a conditional declaration like :

#If Vba7 Then 
Private Declare PtrSafe Function ... 
#Else 
Private Declare Function ... 
#EndIf 

Open in new window

President / Owner CARDA Consultants Inc.
Distinguished Expert 2018
Commented:
Public Declare PtrSafe Function GetDesktopWindow Lib "USER32" () As LongPtr
Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
        ByVal hwnd As LongPtr, _
        ByVal lpOperation As String, _
        ByVal lpFile As String, _
        ByVal lpParameters As String, _
        ByVal lpDirectory As String, _
        ByVal nShowCmd As Long) As LongPtr

Here's a great resource on the subject: https://www.jkp-ads.com/articles/apideclarations.asp
Thanks very much Daniel. It solved the problem.