Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Kommandozeile aus Excelaufruf in Makro auswerten

Kommandozeile aus Excelaufruf in Makro auswerten
heinzs
Hallo alle zusammen,
ist es möglich eine Kommandozeile beim programmaufruf in einem VBA-Makro weiterzuverarbeiten?
Beispiel:
exel.exe c:\test.xlsm /test
soll den Parameter /test in einem VBA Makro in eine Variable übertragen.
DANKE für Hilfe!
Heinz
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Kommandozeile aus Excelaufruf in Makro auswerten
20.10.2010 18:12:03
Nepumuk
Hallo,
na einfach so:
Option Explicit

Private Declare Function GetCommandLine Lib "kernel32.dll" Alias "GetCommandLineA" () As Long
Private Declare Function lstrlen Lib "kernel32.dll" Alias "lstrlenA" ( _
    ByVal lpString As Any) As Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
    ByRef pDst As Any, _
    ByRef pSrc As Any, _
    ByVal ByteLen As Long)

Private Sub Workbook_Open()
    
    Dim strCmdLine As String, strArguments() As String
    Dim lngArgumentsCount As Long, lngIndex As Long
    Dim lngReturn As Long, lngLength As Long
    
    lngReturn = GetCommandLine
    lngLength = lstrlen(lngReturn)
    
    If Cbool(lngLength) Then
        strCmdLine = Space$(lngLength)
        Call CopyMemory(ByVal strCmdLine, ByVal lngReturn, lngLength)
    End If
    
    strCmdLine = Left$(strCmdLine, InStr(strCmdLine & vbNullChar, vbNullChar) - 1)
    
    If Cbool(InStr(strCmdLine, "/e")) Then
        
        If Len(strCmdLine) - InStr(strCmdLine, "/e") > 1 Then
            
            strCmdLine = Mid$(strCmdLine, InStr(strCmdLine, "/e") + 2)
            strCmdLine = Left$(strCmdLine, InStr(strCmdLine, " ") - 1)
            strCmdLine = Trim$(strCmdLine)
            
            Do While strCmdLine <> vbNullString
                
                strCmdLine = Mid$(strCmdLine, 2)
                Redim Preserve strArguments(lngArgumentsCount)
                
                If Cbool(InStr(strCmdLine, "/")) Then
                    
                    strArguments(lngArgumentsCount) = _
                        Left$(strCmdLine, InStr(strCmdLine, "/") - 1)
                    
                Else
                    
                    strArguments(lngArgumentsCount) = strCmdLine
                    
                End If
                
                strCmdLine = Right$(strCmdLine, Len(strCmdLine) - _
                    Len(strArguments(lngArgumentsCount)))
                lngArgumentsCount = lngArgumentsCount + 1
                
            Loop
            
            If Cbool(lngArgumentsCount) Then
                
                For lngIndex = 0 To lngArgumentsCount - 1
                    MsgBox strArguments(lngIndex)
                Next
            End If
        End If
    End If
End Sub

Der Aufruf muss so erfolgen:
"C:\Programme\Microsoft Office\OFFICE12\EXCEL.EXE" /e/Test "D:\Mappe2.xlsm"

So kannst du auch mehrere Parameter übergeben (obige Prozedur zerlegt dir diese wieder in einzelne Werte):
"C:\Programme\Microsoft Office\OFFICE12\EXCEL.EXE" /e/Test1/Test2/Test3 "D:\Mappe2.xlsm"

Gruß
Nepumuk
Anzeige
AW: Kommandozeile aus Excelaufruf in Makro auswerten
25.10.2010 11:40:23
Heinzs
SUPER! Vielen Dank.
MfG
Heinz

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige