Can you have a command line arg with a workbook?

  • Thread starter Thread starter Trefor
  • Start date Start date
T

Trefor

If it possible to read an arg from the command line in VBA?

myworkbook.xls arg1 arg2

I would like to run a certain macro if a certain argument or parameter is
specified.
 
Macros cannot be run from the Command line.

Place your arguments in a Workbook_Open event in Thisworkbook module.

Or Auto_Open in a standard module.


Gord Dibben MS Excel MVP
 
its very limited.

what you can do is create a VBScript file that can open excel & you can pass
arguments to this...

so create a workbook here: C:\temp\DemoBook4.xls
add this procedure to a standard code module:=

Option Explicit
Sub DemoRoutine(a As String, b As String, c As String)
MsgBox a & vbCrLf & b & vbCrLf & c
End Sub

Onto your desktop, add a new textfile, call it anything you like, but change
the .TXT extension to .VBS
wdir with Notepad and paste this:-

option explicit
dim wb
dim xl
set xl = CreateObject("Excel.Application")
set wb = xl.workbooks.Open( "C:\temp\DemoBook4.xls")
xl.visible = true
xl.run
"DemoRoutine",wscript.arguments.item(0),wscript.arguments.item(1),wscript.arguments.item(2)
wb.Close False
xl.quit
set wb = nothing
set xl = nothing


open a command window

type
cd desktop [return]
"new text document.vbs" "a" "b" "c"

basically you're running a VBScript file and passing three arguments to it.
The script opens an excel file and calls the procedure, passing to it the
three variables...which you see in the excel mssage
 
ctac,

Thankyou for the reply.

Sorry I can't read French and I am using XL2003. This look similar to the
code I saw for getting the cmd line from Excel itself as opposed to the
workbook cmd line?
 
Patrick,

Many thanks for the reply, please see my reply to Steve.

--
Trefor


Patrick Molloy said:
its very limited.

what you can do is create a VBScript file that can open excel & you can pass
arguments to this...

so create a workbook here: C:\temp\DemoBook4.xls
add this procedure to a standard code module:=

Option Explicit
Sub DemoRoutine(a As String, b As String, c As String)
MsgBox a & vbCrLf & b & vbCrLf & c
End Sub

Onto your desktop, add a new textfile, call it anything you like, but change
the .TXT extension to .VBS
wdir with Notepad and paste this:-

option explicit
dim wb
dim xl
set xl = CreateObject("Excel.Application")
set wb = xl.workbooks.Open( "C:\temp\DemoBook4.xls")
xl.visible = true
xl.run
"DemoRoutine",wscript.arguments.item(0),wscript.arguments.item(1),wscript.arguments.item(2)
wb.Close False
xl.quit
set wb = nothing
set xl = nothing


open a command window

type
cd desktop [return]
"new text document.vbs" "a" "b" "c"

basically you're running a VBScript file and passing three arguments to it.
The script opens an excel file and calls the procedure, passing to it the
three variables...which you see in the excel mssage






Trefor said:
If it possible to read an arg from the command line in VBA?

myworkbook.xls arg1 arg2

I would like to run a certain macro if a certain argument or parameter is
specified.
 
Patrick / Steve,

This is my first venture into VBScript and I know this is the start of what
will work for me. As it stands the VBScript will error if all the args are
not specified. What is the best way to handle this?

I tied this and it appears to work, but look a little excessive:

If Arg1 <> "" and Arg2 <> "" then
objXL.run "TestMacro", CStr(Arg1), CStr(Arg2)
Elseif Arg2 <> "" then
objXL.run "TestMacro", CStr(Arg1), ""
Else
objXL.run "TestMacro", "" , ""
End If
 
use .Arguments.Count to check that you have enough

eg
dim expected
expected = 3
if wscript.arguments.count = expected then
msgbox "OK"
else
msgbox "Missing arg"
end if
 
Patrick,

Thanks, but I guess I would still need the multiple IF statements (or Select
Case if that works in VBScript?) to cover the different counts?

Also on another note, this script starts a new instance of Excel. Is it
possible to use the existing instance if one already exists?
 
Patrick,

Many thanks for you reply. I would still have to use multiple IF statements
for each count though wouldn’t I?

Also on another note, this script starts a new instance of Excel. Is it
possible for the script to use the existing instance if there is one?
 
Patrick,

Many thanks for you reply. I would still have to use multiple IF statements
for each count though wouldn’t I?

Also on another note, this script starts a new instance of Excel. Is it
possible for the script to use the existing instance if there is one?
 
yes - IF or Select both work - thats down to you to decide what is most
effective

select case wscript.arguments.count
case 0:msgbox "no arguments"
case 1:msgbox "1 arguments"
case 2:msgbox "2 arguments"
case 3:msgbox "3 arguments"
case else :msgbox "more than 3 arguments"



end select
 
Patrick,

I didn't understand what you were refering me to, but I found what I was
after:

This should ensure I reuse an existing instance before starting another.

Err.Clear
on error resume next
Set objXL = GetObject(, "Excel.Application")
If Err <> 0 then
Err.Clear
Set objXL = CreateObject("Excel.Application")
end if
 
Back
Top