ByVal or ByRef - User Defined Types

When you declare a variable with a User Defined Type it can only be passed in using ByRef.
A user defined type is a value data type.
When you declare a variable with a User Defined data type it can only be passed in using ByRef.


ByRef

Passing a User Defined Type into a subroutine using ByRef allows the original variable to be changed.

Type udtType 
   Field1 As String
End Type

Public Sub Passing_UserDefinedTypes1()
   Dim myUserDefinedType As udtType
   myUserDefinedType.Field1 = "before"
   Debug.Print myUserDefinedType.Field1 'before
   
   Call ByReference(myUserDefinedType)
   Debug.Print myUserDefinedType.Field1 'after
End Sub

Public Sub ByReference(ByRef theUserDefinedType As udtType)
'this changes the original
   theUserDefinedType.Field1 = theUserDefinedType.Field1 & "more"
   
'this changes the original
   theUserDefinedType.Field1 = "after"
End Sub

ByVal

Passing a User Defined Type into a subroutine using ByVal is not possible
If you try and declare a user defined type parameter that is passed ByVal you will get a compile error.

Public Sub ByValue(ByVal theUserDefinedType As udtType) 
End Sub

© 2021 Better Solutions Limited. All Rights Reserved. © 2021 Better Solutions Limited TopPrevNext