[AccessD] Dynamically calling combobox_afterupdate from form_open event

John Colby jwcolby at gmail.com
Tue Mar 7 17:52:28 CST 2023


I am having no more success than you using the eval function. 🤕

On Tue, Mar 7, 2023 at 4:36 PM John Colby <jwcolby at gmail.com> wrote:

>
> https://stackoverflow.com/questions/1072075/call-a-vba-function-into-a-sub-procedure
>
> From that it appears that you need to change the private declaration for
> the event sink to public.
>
> After that I did the following:
>
> Create a module and generate two functions:
>
> Function CallIt(str As String)
> Dim frm As Form
>
>     Set frm = Forms("FrmLocation")
>     frm.Form_Current
> End Function
>
> Function CallIt2(str As String)
>     'Call Forms("frmLocation").Form_Current
>     Call Forms("frmLocation").txtName_AfterUpdate
> End Function
>
> Both of these work IF the event sink is public.
>
> You can now call these functions from anywhere including from inside of
> the form.  Pass the event name into the function and mess around with using
> that passed in string.  Like trying your eval() thingie.
>
> Hey you gotta do some of the work!  ;)
>
>
>
>
> On Mon, Mar 6, 2023 at 2:03 PM Ryan W <wrwehler at gmail.com> wrote:
>
>> I have a form that takes openargs, the openargs are such as:
>>
>> cbxJobID|12345
>>
>>
>> The key/pair set can be repeated.. the key is the control name, the other
>> is the data to input into the control name
>>
>> my form open event is as such:
>>
>> Private Sub Form_Open(Cancel As Integer)
>>     Dim l         As Long: l = 0
>>     Dim strArgs() As String
>>     If IsNull(Me.OpenArgs) Then Exit Sub
>>
>>     strArgs = Split(Me.OpenArgs, "|")
>>     For l = 0 To UBound(strArgs) Step 2
>>         Me(strArgs(l)) = strArgs(l + 1)
>>         Call Eval(strArgs(l) & "_AfterUpdate")
>>     Next l
>>
>> End Sub
>>
>>
>>
>> The problem I'm having is the "Call Eval()" part.  I get an error:
>> "Run-Time error '2482':
>> Cannot find name 'cbxJobID_AfterUpdate' you entered in the expression.
>>
>> However that exists.  I've tried making it a public sub, private sub,
>> public or private function.
>>
>> None of it seems to work. Maybe it can't be a form level function/sub, has
>> to be module level?
>>
>> The microsoft documentation under examples shows the method I'm using is
>> supported:
>>
>> https://learn.microsoft.com/en-us/office/vba/api/access.application.eval
>>
>>
>> The following example assumes that you have a series of 50 functions
>> defined as A1, A2, and so on. This example uses the *Eval* function to
>> call
>> each function in the series.
>> Sub CallSeries()
>>
>>  Dim intI As Integer
>>
>>  For intI = 1 To 50
>>  Eval("A" & intI & "()")
>>  Next intI
>>
>> End Sub
>>
>>
>> So, something is missing here... can anyone clue me in?
>> --
>> AccessD mailing list
>> AccessD at databaseadvisors.com
>> https://databaseadvisors.com/mailman/listinfo/accessd
>> Website: http://www.databaseadvisors.com
>>
>
>
> --
> John W. Colby
> Colby Consulting
>


-- 
John W. Colby
Colby Consulting


More information about the AccessD mailing list