Thema Datum  Von Nutzer Rating
Antwort
03.11.2016 13:22:24 Ben
NotSolved
03.11.2016 13:39:41 BigBen
NotSolved
03.11.2016 13:53:58 BigBen
NotSolved
03.11.2016 14:13:34 Ben
NotSolved
Rot VBA: Attribute von neu erzeugten Objekten zeigen auf Speicher der bisherigen Objekte
03.11.2016 15:49:12 BigBen
NotSolved
03.11.2016 15:50:45 BigBen
NotSolved
07.11.2016 12:00:53 Ben
NotSolved

Ansicht des Beitrags:
Von:
BigBen
Datum:
03.11.2016 15:49:12
Views:
696
Rating: Antwort:
  Ja
Thema:
VBA: Attribute von neu erzeugten Objekten zeigen auf Speicher der bisherigen Objekte

Hallo,

damit das Ganze ohne Kompilierungsfehler durchläuft haben auch keine Anpassungen via Notepad-Editor o.ä. geholfen.

Letzendlich habe ich das wie folgt zum Laufen bekommen:

Modul Modul3:

Option Explicit

Public currentMyTwoObj As New MyTwoObject

Sub Start()
    Dim myRuns As New runs
    myRuns.moreOneObjects
    Stop
End Sub

Klasse init:

Option Explicit
 
Dim myTwoObjTmp As New MyTwoObject
 
Public Sub initialize()
    
    Set myTwoObjTmp = myTwoObjTmp.GetMyTwoObject(5, "String")
    
    Set Modul3.currentMyTwoObj = myTwoObjTmp
 
End Sub

Klasse MyOneObject:

Option Explicit
 
Public varOne As MyTwoObject
Public varTwo As String
Public varThree As Integer
Public varFour As Boolean
Public varFive As Integer
 
 
Public Function GetMyOneObject(ByRef paramOne As MyTwoObject, ByVal paramTwo As String, ByVal paramThree As Integer, ByVal paramFour As Boolean) As MyOneObject
   Set GetMyOneObject = Me
 
   Dim varOne As MyTwoObject
 
   Set varOne = paramOne
   Me.varTwo = paramTwo                     'Mit und ohne "Me." gleiches Ergebnis
   Me.varThree = paramThree
   Me.varFour = paramFour
   'varFive = paramOne.varOne # Fehler paramone ist nicht definiert
 
End Function

Klasse myTwoObject:

Option Explicit
 
Public myOneObjCollection As New Collection
Public varOne As Integer
Public varTwo As String
 
Public Function GetMyTwoObject(vOne As Integer, vTwo As String) As MyTwoObject
 
   Set GetMyTwoObject = Me
 
   Set myOneObjCollection = New Collection
 
   varOne = vOne
   varTwo = vTwo
 
End Function
 
Public Function addMyOneObj(ByVal myOneObj As MyOneObject)    'Hier führt ByRef zu keiner Veränderung
 
   myOneObjCollection.Add myOneObj
 
End Function

Klasse runs:

Option Explicit
 
Public Sub moreOneObjects()
 
   Dim myOneObjTmp As New MyOneObject
 
   Set myOneObjTmp = MyOneObject(Modul3.currentMyTwoObj, "String", 5, True)
 
   Modul3.currentMyTwoObj.addMyOneObj myOneObjTmp
   
   Set myOneObjTmp = Nothing
   
End Sub

Wie man sehen kann, musste ich in der Klasse myOneObject die Zeile "varFive = paramOne.varOne" auskommentieren. Hier gab es immer ein Laufzeitfehler, da paramOne den Wert NOTHING hat.

Auch im Modul Modul3 habe ich eine Testaufruf Start hinzugefügt, damit das Ganze überhaupt anfing zu laufen.

Entspricht dies so der Ausgangssituation? Falls nicht, wäre es einfacher, wenn Du mir einfach die Excel-Datei via Mail an nospam2016@clh-teltow.de senden kannst.

 

LG, BigBen


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen