Es gibt anwendugsfälle bei denen man nicht weissob, ob die Übergabevariable ein Objekt oder eine einfach Variable ist. ref() handelt im Gegensatz zu = das selber.
Die Funktion ref() verwedne ich häufig in grösseren Funktionen/Klassen, bei denen die Methoden flexibel sind. Zum Beispiel bei [VBA] print_r() und bei [VBA] Iterator
Das Beispiel so macht wenig Sinn. Es zeigt nur wie die Funktion angewendet wird
Eine Methoden in einer Klasse, die eine Variable entgegen nehmen
Private myItem As Variant 'Wie wissen hier nicht, ob ein Objekt oder ein anderer Datentyp daherkommt Public Sub setItem(ByRef iItem As Variant) ref myItem, iItem End Sub Public Property Get tName() As String tName = TypeName(myItem) End Property
Test
Dim fso As New FileSystemObject Dim cl As new MyClass cl.setItem fso debug.print cl.tName
Attribute VB_Name = "udf_ref" '------------------------------------------------------------------------------- 'File : udf_ref.bas ' Copyright mpl by ERB software ' All rights reserved ' http://wiki.yaslaw.info/dokuwiki/doku.php/vba/ 'Environment : VBA 2007 + 'Version : 1.1.0 'Name : ref 'Author : Stefan Erb (ERS) 'History : 23.06.2014 - ERS - Creation ' 19.10.2015 - ERS - Viel unnötiger Code entfernt '------------------------------------------------------------------------------- Option Explicit '/** ' * Bei einer Variablenübergabe muss immer unterscheiden werden, ob es ein Objekt ist oder nicht. ' * Diese Sub nimmt einem die Arbeit ab ' * ref(oNode, iNode) ' * @param Variant Variable, die den Wert bekommen soll ' * @param Variant Ret Wert selber ' */ Public Sub ref(ByRef oNode As Variant, ByRef iNode As Variant) If IsObject(iNode) Then Set oNode = iNode: Exit Sub oNode = iNode End Sub