[AccessD] Application.Run not passing my arguments declared optionally

Bill Benson bensonforums at gmail.com
Sat Apr 12 20:11:28 CDT 2014


I got an alternative to "almost" work.

Dim X
'Tried X = Eval(strRoutine & " (,true)") but got "The expression you entered
contains invalid syntax"
'Next tried X = Eval(strRoutine & " (Restarted:=True)") but got "Microsoft
Access cannot find the name 'Restarted' you entered in the expression.
'It seems arguments have to be passed all or nothing?
          I can do one of these, but it changes what I have to do inside my
function:
              X = Eval(strRoutine & " ()")
or
              X = Eval(strRoutine & " (False,True)")

Of course, the arguments can be anything acceptable as parameters - e.g., I
don't have to pass "False" for the first argument, I can pass anything that
a variant can hold, since the parameter is declared as a variant... but I do
have to pass either no arguments or all arguments in order. Which means I
can no longer test IsMissing(Arg1) inside the function.

I keep thinking that I am missing something elemental here.
Thanks for those following and thinking about this on my behalf.

Function DropIndexes(Optional T, Optional Restarted)
'...Blah Blah
End Function

-----Original Message-----
From: Bill Benson [mailto:bensonforums at gmail.com] 
Sent: Saturday, April 12, 2014 8:48 PM
To: 'Access Developers discussion and problem solving'
Subject: Application.Run not passing my arguments declared optionally

I want some code which calls a dynamically named function and has a
dynamically listed number of arguments to do this upon re-open of a
database. So what I did was set the default form of my database to this
invisible form. In that form, on load, I check a record in a table which
should indicate the function or sub I want to call. So far I have tested
this only with one routine, and while I can call that routine, I cannot seem
to get the arguments to take hold. Basically, I get that they are missing,
regardless how I have tried to structure the function call. A simple
example:

Private Sub Form_Load()
Dim strRoutine As String
strRoutine = Nz(DLookup("Function", "Tbl2"), "")
If strRoutine <> "" Then
    'Suppose Function had value 'DropIndexes'
    Debug.Print Application.Run(strRoutine, , True)
End If


Function DropIndexes(Optional T, Optional Restarted)
Dim D As DAO.Database
Dim i As Long
'Tried to pass nothing for T and True for Restarted
Debug.print Ismissing(Restarted)

'
'Result:
'True


Based on this result I cannot even begin to explore further what I might do
if the arguments are different, listed in different order, or whatever, for
a different dynamically named routine.

Thanks if anyone can help me get the arguments to take hold.




More information about the AccessD mailing list