KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q186143: HOWTO: Use the CallByName Function to Run a Procedure

Article: Q186143
Product(s): Microsoft Visual Basic for Windows
Version(s): 
Operating System(s): 
Keyword(s): kbGrpDSVB
Last Modified: 11-JAN-2001

-------------------------------------------------------------------------------
The information in this article applies to:

- Microsoft Visual Basic Learning Edition for Windows, version 6.0 
- Microsoft Visual Basic Professional Edition for Windows, version 6.0 
- Microsoft Visual Basic Enterprise Edition for Windows, version 6.0 
-------------------------------------------------------------------------------

SUMMARY
=======

The CallByName function provides Visual Basic 6.0 with the ability to call a
property or method of an object using a string at run-time. Unlike the previous
versions of Visual Basic in which methods and properties had to be known at
design-time, the CallByName function allows for a great deal of flexibility at
run-time. The use of this function is limited to OLE servers and Visual Basic
class modules.

MORE INFORMATION
================

The following sample demonstrates how to use the CallByName function to call a
method, a Property Let, and a Property Get. For more information on the
CallByName function, please refer to the Visual Basic Help Files and the Books
On-Line.

Steps to Create Sample Project
------------------------------

1. Start a new Standard EXE project in Visual Basic. Form1 is created by
  default.

2. Add a Class Module (Class1) to the project.

3. Add the following code to the Class Module:

        Option Explicit
        Private MyPropValue As Integer

        Public Function Multiply(x As Integer, y As Integer) As Integer
           Multiply = x * y
        End Function

        Public Property Get MyProperty() As Variant
           MyProperty = MyPropValue
        End Property

        Public Property Let MyProperty(ByVal vNewValue As Variant)
           MyPropValue = vNewValue
        End Property

4. Add the following code to the Form Module (Form1):

        Option Explicit
        Private Sub Form_Click()
           Dim myclass As New Class1
           Dim sum As Integer
           Dim prop As Integer

           ' Example of calling a method with CallByName
           ' equivalent to -- sum = myclass.Multiply(12, 12)
           sum = CallByName(myclass, "Multiply", VbMethod, 12, 12)
           MsgBox sum

           ' Example of a property let with CallByName
           ' equivalent to -- myclass.MyProperty = 5
           CallByName myclass, "MyProperty", VbLet, 5

           ' Example of a property get with CallByName
           ' equivalent to -- prop = myclass.MyProperty
           prop = CallByName(myclass, "MyProperty", VbGet)
           MsgBox prop
        End Sub

5. Run the Project and click on Form1. A message box displaying the number 144
  and a message box displaying the number 5 are shown in succession.

Additional query words: kbDSupport kbDSD kbVBA kbVBp600 kbVBp

======================================================================
Keywords          : kbGrpDSVB 
Technology        : kbVBSearch kbAudDeveloper kbZNotKeyword6 kbZNotKeyword2 kbVB600Search kbVBA600 kbVB600
Issue type        : kbhowto

=============================================================================

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1986-2002.