[AccessD] Dynamically calling combobox_afterupdate from form_open event

Ryan W wrwehler at gmail.com
Tue Mar 7 18:21:52 CST 2023


I think it was that Stuart mentioned the public functions have to be in a module and not a form codebehind for Eval to work.  So…. I just made a select case to run what’s needed as the loop comes across the key/value pair. 



Sent from my iPhone

> On Mar 7, 2023, at 5:52 PM, John Colby <jwcolby at gmail.com> wrote:
> 
> 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
> -- 
> AccessD mailing list
> AccessD at databaseadvisors.com
> https://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com


More information about the AccessD mailing list