PRB: Can't Set Formal Parameter When Setting Object VarsLast reviewed: December 18, 1995Article ID: Q105230 |
The information in this article applies to:
- Microsoft Visual Basic programming system for Windows, versions 2.0 and 3.0
SYMPTOMSWhen trying to use the Set keyword to assign a value to a formal parameter passed to a Visual Basic Sub or Function procedure, you may get a "Can't Set formal parameter" error at compile or run time. Specifically, trying to use a Set statement on an object variable that is a formal parameter of a procedure results in this error.
CAUSEThis behavior is by design. You cannot use a procedure's formal parameter as the destination of a Set statement. Object variables can be parameters of a Sub or Function procedure, but if an object variable is a parameter, its value cannot be changed inside the called procedure.
WORKAROUNDYou can use a Set statement on an array of objects that is passed as a parameter. For example, you can modify the code shown in the "Steps to Reproduce Behavior" section to the following to prevent the error:
Sub Form_Load () ReDim X(0) As Form Call MySub1(X()) End Sub Sub MySub1 (FormalParameterX() As Form) Set FormalParameterX(0) = Form1 FormalParameterX(0).Caption = "Success" ' Form's caption will change. End Sub RESOLUTIONIf you make the object variable Global instead of passing it as a parameter, you can use Set statements inside procedures.
STATUSThis behavior is by design.
MORE INFORMATIONObjects as parameters can be thought of as a copy of the structure that defines the object. If Set statements were allowed on these objects, this would change the value inside the routine, but upon returning from the routine the changes would be lost and the object variable would revert back to its original value.
Steps to Reproduce Behavior
More Steps to Reproduce BehaviorHere is another set of steps that result in the error:
Expected: Integer or Long or Single or Double or Currency or String or Variant.ByVal is allowed with the variable types listed in the error message, but it is not allowed with any other variable type.
|
Additional reference words: 2.00 3.00
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |