Calling Form in Global Function

Posted on 2002-03-08
Last Modified: 2010-05-02
    In our global functions in code modules, we very often need to extract parameters from variables in the form that called the function, like so:
Public Function Foo(frmCaller As Form) As Boolean
   Dim x as Integer
   x = frmCaller.intDataInForm
   ... more code ...
End Function
     I'm hoping this is a need that is so common that there is a slick way to handle it. It seems dopey to specify "frmCaller" in so many global functions.
     Any thoughts?
Question by:GebhartBob
LVL 18

Accepted Solution

bobbit31 earned 50 total points
ID: 6851087
one way to do it:

in your module do:

Public curForm as Form

Public Function Foo(frmCaller As Form) As Boolean
  Dim x as Integer
  x = frmCaller.intDataInForm
  ... more code ...
End Function

in your form code:

set curForm to current Form

public sub command1_click()
   set curForm = Me
   call Foo()

end sub    

LVL 18

Expert Comment

ID: 6851509
Short of passing all the necessary variables as parameters, there really isn't a cleaner way of doing it.

bobbit31's approach is what I sometimes take if my code happens to be in a class instead of a global code module:

My class might have this code:

Public curForm as Form

Public Function Foo() As Boolean
 Dim x as Integer
 x = curForm.intDataInForm
 ... more code ...
End Function

Then, in my code I might have:

Dim oTemp as New MyClass

Set oTemp.curForm = Me
If oTemp.Foo then.....

LVL 15

Expert Comment

ID: 6851832
There are many ways to pass parameters or access form's properties/methods.
Early bound solution would be to define some interface, implement that interface in form(s) and pass "Me" to function:

' in Form:
Implements IFormData
Private Property Get IFormData_intDataInForm() As Integer
     IFormData_intDataInForm = 100
End Property
' to call function, use:
     res = Foo(Me)

' in bas module:
Public Function Foo(frmCaller As IFormData) As Boolean
     x = frmCaller.intDataInForm
End Function

' class IFormData (interface)
Option Explicit
Public Property Get intDataInForm() As Integer
End Property

Author Comment

ID: 6857439
    Thanks, everybody.

Author Comment

ID: 7063282
    Finally, the light dawns on this subject:
     If you declare in your standard code module (.bas) the following:
     Public frm As Form
     Then in the Form_Activate Event of every Form module include as the first line the following:
     Set frm = Me
     The global variable "frm" will always contain the current Form object, so that references to data, Subs and Functions declared as Public in Forms modules can be coded like this:
     frm.Variable = (Whatever)
     result = frm.Function(par1, par2, ... parN)
     It's simple, and it works very nicely.

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The debugging module of the VB 6 IDE can be accessed by way of the Debug menu item. That menu item can normally be found in the IDE's main menu line as shown in this picture.   There is also a companion Debug Toolbar that looks like the followin…
Background What I'm presenting in this article is the result of 2 conditions in my work area: We have a SQL Server production environment but no development or test environment; andWe have an MS Access front end using tables in SQL Server but we a…
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…

867 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now