ist es möglich beim Aufruf vom Excel einen Parameter mitzugeben, den ich dann durch VBA auswerten kann.
z.B. test.xls hallo
dann könnte ich in dem Workbook_Open abfragen, wenn hallo dann dies, sonst jenes.
Danke für euer Hilfe
Steffen
"C:\Programme\Microsoft Office\Office\EXCEL.EXE" /e/Para1/Para2 "C:\Daten\Datei.xls"
Wichtig ist die Reihenfolge: die Parameter mit /e vor der zu öffnenden Datei.
Mit folgender Auto_Open in Datei.xls werden die Parameter angezeigt:
Option Explicit
Private Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineA" () As String
Sub Auto_open()
Dim CmdLine As String 'command-line string
Dim Args() As String 'array for storing the parameters
Dim ArgCount As Integer 'number of parameters
Dim Pos1 As Integer, Pos2 As Integer
CmdLine = GetCommandLine() 'get the cmd-line string
CmdLine = Left$(CmdLine, InStr(CmdLine & vbNullChar, vbNullChar) - 1)
On Error Resume Next 'for the wksht-function "Search"
Pos1 = WorksheetFunction.Search("/", CmdLine, 1) + 1 'search "/e"
Pos1 = WorksheetFunction.Search("/", CmdLine, Pos1) + 1 '1st param
If InStr(Pos1, CmdLine, " ") > 0 Then CmdLine = Left$(CmdLine, InStr(Pos1, CmdLine, " "))
Do While Err = 0
Pos2 = WorksheetFunction.Search("/", CmdLine, Pos1)
ArgCount = ArgCount + 1
ReDim Preserve Args(ArgCount)
Args(ArgCount) = Mid(CmdLine, Pos1, _
IIf(Err, Len(CmdLine), Pos2) - Pos1)
MsgBox "Argument " & ArgCount & " : " & Args(ArgCount)
Pos1 = Pos2 + 1
Loop
End Sub
GrußUm Excel mit einem Parameter zu starten, kannst Du folgende Schritte befolgen:
EXCEL.EXE)./e gefolgt von Deinen Parametern hinzu. Zum Beispiel:
"C:\Programme\Microsoft Office\Office\EXCEL.EXE" /e/Para1/Para2 "C:\Daten\Datei.xls"Fehler: Parameter werden nicht erkannt.
/ getrennt sind und keine Leerzeichen enthalten.Fehler: Excel startet nicht oder öffnet die falsche Datei.
Falls die Übergabe von Parametern direkt beim Start nicht funktioniert, kannst Du folgende Alternativen ausprobieren:
Hier ist ein Beispiel, wie Du die Parameter in VBA auslesen kannst:
Option Explicit
Private Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineA" () As String
Sub Auto_Open()
Dim CmdLine As String 'command-line string
Dim Args() As String 'array for storing the parameters
Dim ArgCount As Integer 'number of parameters
Dim Pos1 As Integer, Pos2 As Integer
CmdLine = GetCommandLine() 'get the cmd-line string
CmdLine = Left$(CmdLine, InStr(CmdLine & vbNullChar, vbNullChar) - 1)
On Error Resume Next 'for the wksht-function "Search"
Pos1 = WorksheetFunction.Search("/", CmdLine, 1) + 1 'search "/e"
Pos1 = WorksheetFunction.Search("/", CmdLine, Pos1) + 1 '1st param
Do While Err = 0
Pos2 = WorksheetFunction.Search("/", CmdLine, Pos1)
ArgCount = ArgCount + 1
ReDim Preserve Args(ArgCount)
Args(ArgCount) = Mid(CmdLine, Pos1, IIf(Err, Len(CmdLine), Pos2) - Pos1)
MsgBox "Argument " & ArgCount & " : " & Args(ArgCount)
Pos1 = Pos2 + 1
Loop
End Sub
In diesem Beispiel wird die Funktion GetCommandLine verwendet, um die übergebenen Parameter auszulesen und in einer MessageBox anzuzeigen.
1. Kann ich mehrere Parameter gleichzeitig übergeben?
Ja, Du kannst beliebig viele Parameter über / getrennt übergeben, solange die Gesamtlänge der Befehlszeile nicht überschritten wird.
2. Wie kann ich die Parameter in einer Funktion verwenden?
Du kannst die übergebenen Parameter in einer VBA-Funktion verwenden, indem Du sie in einem Array speicherst und danach darauf zugreifst.
3. Was passiert, wenn ich einen ungültigen Parameter übergebe?
Wenn ein ungültiger Parameter übergeben wird, kann dies zu Fehlern in Deinem VBA-Code führen. Stelle sicher, dass alle Parameter validiert werden, bevor Du sie verwendest.
Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden
Suche nach den besten AntwortenEntdecke unsere meistgeklickten Beiträge in der Google Suche
Top 100 Threads jetzt ansehen