How to Avoid the "ByRef Argument Type Mismatch" Error
ID: Q138535
|
The information in this article applies to:
-
Microsoft Visual Basic Standard, Professional, and Enterprise Editions, 16-bit and 32-bit, for Windows, version 4.0
-
Microsoft Visual Basic Standard and Professional Editions for Windows, version 3.0
SUMMARY
If you pass a parameter to a function or sub procedure by reference, the
type of the actual parameter passed and the corresponding function argument
must match. Otherwise, you will get a "ByRef argument type mismatch" error.
MORE INFORMATION
The reason types have to match with ByRef parameters is that the called
procedure is working on the original outside variable through a reference
pointer. In the following step-by-step example, if the procedure thinks it
is modifying a variant but the outside variable is really a control, the
data will probably be ruined.
If something is passed by value, Visual Basic can do automatic type
conversion. When you pass by value, the inside procedure is working on a
copy and can therefore modify it in any way, such as converting the passed
object to a temporary Variant and working on that.
This applies to simple built-in types as well as objects. Problems like
this are easier to understand and debug if you set Option Explicit and
declare every variable type explicitly.
Step-by-Step Example
- Start a new project in Visual Basic. Form1 is created by default.
- Add the following code to the General Declarations section of Form1:
Sub test(x As Control)
x.Text = "hello"
End Sub
- Add the following code to the Form_Click event of Form1:
Private Sub Form_Click()
For Each object In Controls
test object
Next
End Sub
- Press F5 to run the program. Click Form1. The "ByRef argument type
mismatch" error appears because the type of object passed is a Variant
by default and the argument to test() is of type Control.
- To avoid this error, you can do one of the following:
Additional query words:
3.00 4.00 vb4win vb4all
Keywords :
Version :
Platform :
Issue type :