Object *innerhalb* einer Funktion *gebrauchsfähig* ändern

03/05/2011 - 13:57 von Heinz-Mario Frühbeis | Report spam
Hallo!

Das tàte mich auch schon seit làngerem interessieren:

Bsp.:

Dim rVal As Long
Dim Obj as Object

Function SetNewObject(nObj As Object) As Long
Set nObj = New Collection
SetNewObject = 0
End Function

rVal = SetNewObject(Obj)
rVal = 1

In diesem Fall bleibt "Obj" "solange" Nothing bis der Code bei "rVal =
1" angekommen ist.
Gibt es vlt. irgendeine Möglichkeit, das "Obj" schon in der Funktion
"SetNewObject" als "New Collection" zu gebrauchen?

:)

Mit Gruß
Heinz-Mario Frühbeis
 

Lesen sie die antworten

#1 Wolfgang Wolf
04/05/2011 - 07:53 | Warnen spam
Am 03.05.2011 13:57, schrieb Heinz-Mario Frühbeis:
Hallo!

Das tàte mich auch schon seit làngerem interessieren:

Bsp.:

Dim rVal As Long
Dim Obj as Object

Function SetNewObject(nObj As Object) As Long
Set nObj = New Collection
SetNewObject = 0
End Function

rVal = SetNewObject(Obj)
rVal = 1

In diesem Fall bleibt "Obj" "solange" Nothing bis der Code bei "rVal > 1" angekommen ist.



Kann ich nicht nachvollziehen. Teste mal folgendes:

Option Explicit
Function SetNewObject(nObj As Object) As Long
Set nObj = New Collection
Debug.Print nObj Is Nothing
SetNewObject = 0
End Function

Private Sub Form_Load()
Dim rVal As Long
Dim Obj As Object
Debug.Print Obj Is Nothing
rVal = SetNewObject(Obj)
Debug.Print Obj Is Nothing
rVal = 1
Debug.Print Obj Is Nothing
End Sub

Gibt es vlt. irgendeine Möglichkeit, das "Obj" schon in der Funktion
"SetNewObject" als "New Collection" zu gebrauchen?




Obj kannst Du in SetNewObject natürlich nicht verwenden,
weil es hier nicht bekannt ist. Bekannt ist hier nur nObj,
welches jedoch eine Referenz auf Obj ist (wegen ByRef).
So würde auch Obj funktionieren:

Option Explicit
Dim Obj As Object
Function SetNewObject(nObj As Object) As Long
Set nObj = New Collection
Debug.Print Obj Is Nothing
SetNewObject = 0
End Function

Private Sub Form_Load()
Dim rVal As Long
Debug.Print Obj Is Nothing
rVal = SetNewObject(Obj)
Debug.Print Obj Is Nothing
rVal = 1
Debug.Print Obj Is Nothing
End Sub

Schönen Gruß
W. Wolf

Ähnliche fragen