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

Stuart McLachlan stuart at lexacorp.com.pg
Sat Apr 12 21:34:10 CDT 2014


After doing a bit of testing, it certainly looks like a limitation on Application.Run (guess they 
were too busy creating multivalue fields etc to make it work properly).

I'd consider going with a wrapper function with a SELECT CASE block and specifically calling 
a function depending on the input parameter.



On 12 Apr 2014 at 21:11, Bill Benson wrote:

> 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.
> 
> 
> -- 
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
> 




More information about the AccessD mailing list