Ik probeer voor elkaar te krijgen om in een Excelbestand een array te kunnen gebruiken waarin de parameters zitten die vanaf de command line zijn meegegeven.
Op http://www.mrexcel.com/archive/VBA/15657.html heb ik een handleiding hiervoor gevonden, maar die werkt niet helemaal vlekkeloos. De handleiding zegt dat ik een procedure moet maken met de naam Auto_open en geeft daarbij de volgende voorbeeldcode:
(die 2 MsgBox'en zijn van mij)
Wanneer ik het excel-bestand start door in de Start/Uitvoeren-regel van Windows dit in te typen: "test.xls /e/testje" krijg ik de MsgBox voor de api-call wel te zien, maar krijg ik bij de api-call een DrWatson op EXCEL.EXE voor de kiezen. Als ik bij Start/Uitvoeren "excel test.xls /e/testje" intyp, dan krijg ik de beide MsgBox-en te zien, alleen de messagebox in de do/while loop krijg ik nul keer te zien en de msgbox vlak na de apicall toont het volledige pad naar EXCEL.EXE.
Weet iemand wat ik fout doe? De bedoeling is dat ik dus vanaf een batch-file Excel start, en dat de VBA-code die ik in Excel heb staan gebruik kan maken van teksten die in parameters is meegegeven.
Het besturingssysteem is Windows NT 4.0 en de versie van Excel is 2000.
Op http://www.mrexcel.com/archive/VBA/15657.html heb ik een handleiding hiervoor gevonden, maar die werkt niet helemaal vlekkeloos. De handleiding zegt dat ik een procedure moet maken met de naam Auto_open en geeft daarbij de volgende voorbeeldcode:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| Option Base 1
Declare Function GetCommandLineA Lib "Kernel32" () As String
Sub Auto_Open()
Dim CmdLine As String 'command-line string
Dim argv() As String ' array for storing the parameters
Dim argc As Integer ' number of params
Dim pos1, pos2 As Integer
argc = 0
MsgBox "voor GetCommandLineA"
CmdLine = GetCommandLineA
MsgBox "na GetCommandLineA: " & vbCrLf & CmdLine
On Error Resume Next
pos1 = WorksheetFunction.Search("/", CmdLine, 1) + 1
pos1 = WorksheetFunction.Search("/", CmdLine, pos1) + 1
Do While Err = 0
pos2 = WorksheetFunction.Search("/", CmdLine, pos1)
argc = argc + 1
ReDim Preserve argv(argc)
argv(argc) = Mid(CmdLine, pos1, IIf(Err, Len(CmdLine), pos2) - pos1)
MsgBox "Argument " & argc & ": " & argv(argc)
pos1 = pos2 + 1
Loop
End Sub |
(die 2 MsgBox'en zijn van mij)
Wanneer ik het excel-bestand start door in de Start/Uitvoeren-regel van Windows dit in te typen: "test.xls /e/testje" krijg ik de MsgBox voor de api-call wel te zien, maar krijg ik bij de api-call een DrWatson op EXCEL.EXE voor de kiezen. Als ik bij Start/Uitvoeren "excel test.xls /e/testje" intyp, dan krijg ik de beide MsgBox-en te zien, alleen de messagebox in de do/while loop krijg ik nul keer te zien en de msgbox vlak na de apicall toont het volledige pad naar EXCEL.EXE.
Weet iemand wat ik fout doe? De bedoeling is dat ik dus vanaf een batch-file Excel start, en dat de VBA-code die ik in Excel heb staan gebruik kan maken van teksten die in parameters is meegegeven.
Het besturingssysteem is Windows NT 4.0 en de versie van Excel is 2000.