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.