Share via


VBA to fetch Excel command line - 64 bit

Question

Friday, October 31, 2014 7:36 PM

Does anyone have a working copy of a function that implements GetCommandLine windows function in a 64 bit environment ?

My 32 bit version will not work without modifications. I made the recommended onces re: PtrSafe and LongPtr.....but it's still a no-go.

I need to pass a parameter when large Excel workbooks are being run and updated on the scheduler.

All replies (1)

Sunday, November 2, 2014 7:13 AM ✅Answered

'Note: Declaration is overloaded with LONG!
#If Win64 Then
Private Declare PtrSafe Function GetCommandLineL Lib "kernel32" _
    Alias "GetCommandLineA" () As LongPtr
Private Declare PtrSafe Function lstrcpyL Lib "kernel32" _
    Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As LongPtr) As Long
Private Declare PtrSafe Function lstrlenL Lib "kernel32" _
    Alias "lstrlenA" (ByVal lpString As LongPtr) As Long
#Else
Private Declare Function GetCommandLineL Lib "kernel32" _
    Alias "GetCommandLineA" () As Long
Private Declare Function lstrcpyL Lib "kernel32" _
    Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As Long) As Long
Private Declare Function lstrlenL Lib "kernel32" _
    Alias "lstrlenA" (ByVal lpString As Long) As Long
#End If

Function GetCommandLine() As String
  Dim strReturn As String
  #If Win64 Then
  Dim lngPtr As LongPtr
  #Else
  Dim lngPtr As Long
  #End If
  Dim StringLength As Long
  'Get the pointer to the commandline string
  lngPtr = GetCommandLineL
  'get the length of the string (not including the terminating null character):
  StringLength = lstrlenL(lngPtr)
  'initialize our string so it has enough characters including the null character:
  strReturn = String$(StringLength + 1, 0)
  'copy the string we have a pointer to into our new string:
  lstrcpyL strReturn, lngPtr
  'now strip off the null character at the end:
  GetCommandLine = Left$(strReturn, StringLength)
End Function