none
VBA to fetch Excel command line - 64 bit RRS feed

  • Question

  • 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.

    Friday, October 31, 2014 7:36 PM

Answers

  • '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
    Sunday, November 2, 2014 7:13 AM