Can you have a command line arg with a workbook?

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

Gord Dibben

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
 
P

Patrick Molloy

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
 
T

Trefor

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?
 
T

Trefor

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

Trefor

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
 
P

Patrick Molloy

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
 
T

Trefor

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?
 
T

Trefor

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?
 
T

Trefor

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?
 
P

Patrick Molloy

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
 
T

Trefor

Patrick,

Great thankyou. Are you able to help with my last question re multiple
instances?
 
T

Trefor

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top