Get/Let Aufruf?

  • Excel

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von peterfido.

    Get/Let Aufruf?

    Hi Leute!

    Ich hab hier ein Klassenmodul:

    Quellcode

    1. Option Explicit
    2. Private id As String
    3. 'Property Get liest von value
    4. Public Property Get getId() As String
    5. getId = id
    6. End Property
    7. 'Property Let schreibt den value
    8. Public Property Let getId(ByVal vNewValue As String)
    9. id = vNewValue
    10. End Property


    Und hier hab ich noch den Code meines Moduls:

    Quellcode

    1. Option Explicit
    2. Public Function CreateReqsByWorkSheet(ByVal ws As Worksheet)
    3. 'Dimensioniere Requirement-Variable
    4. Dim currentRequirement As ClsReq
    5. Set currentRequirement = New ClsReq
    6. 'An dieser Stelle möchte ich nun den eventuellen Inhalt der privaten id Variable auslesen
    7. Dim test As String
    8. test = currentRequirement.getId()
    9. 'An dieser Stelle möchte ich nun den eventuellen Inhalt der privaten id Variable überschreiben
    10. Dim test As String
    11. currentRequirement.getId() = "myNewId"
    12. End Function


    Das Problem hierbei ist nun, dass bei Verwendung der Property Get/Let der Compiler mir einen "Laufzeitfehler '91': Objektvariable oder With-Blockvariable nicht festgelegt" wirft.

    Was mache ich falsch? Ich verwende doch die Properties richtig, oder?
    Hi,

    da fehlt einiges von Deinem Code.

    Folgendes Modul läuft zum Testen:

    Visual Basic-Quellcode

    1. Option Explicit
    2. Public currentRequirement As ClsReq
    3. Public Sub InitCurReq()
    4. Set currentRequirement = New ClsReq
    5. End Sub
    6. Public Sub Lesen()
    7. Dim test As String
    8. test = currentRequirement.getId()
    9. Debug.Print test
    10. End Sub
    11. Public Sub Schreiben()
    12. Dim test As String
    13. currentRequirement.getId() = "myNewId"
    14. End Sub
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    Ich habe meinen Fehler im Code mit dem Property Get mittlerweile auch gefunden. Dennoch vielen Dank für dein Beispiel!

    Jetzt habe ich allerdings noch ein weiteres Problem:

    Aufrufendes normales Modul:

    Quellcode

    1. Public Sub Import()
    2. Dim import As ClsModImport
    3. Set import = New ClsModImport
    4. import.CreateReqsByWorkSheet ws
    5. End Sub





    Klassenmodul ClsReq:

    Quellcode

    1. Public Function CreateReqsByWorkSheet(ByVal ws As Worksheet)
    2. Set currentRequirement = CreateReqByLine(currentLine, header, attributeOrderInSheet)
    3. Dim currentRequirement As New ClsReq
    4. Set currentRequirement = New ClsReq
    5. Dim test As String
    6. test = currentRequirement.getId() 'Hier kommen die Information von .getId() nicht mehr an!!!!
    7. End Function
    8. Private Function CreateReqByLine(ByVal curReqRange As Range, ByVal header As Range, ByRef order() As String) As ClsReq
    9. Dim curReq As ClsReq
    10. Set curReq = New ClsReq
    11. 'curReq = curReq.SetData(curReqRange, header, order)
    12. Set CreateReqByLine = curReq.SetData(curReqRange, header, order)
    13. 'Debug
    14. Dim test As String
    15. test = curReq.getId()
    16. End Function





    Klassenmodul ClsModImport:

    Quellcode

    1. Option Explicit
    2. 'Private und "mandatory attributes"
    3. Private id As String
    4. Private typ As String
    5. Private sfs As String
    6. Private aenderungsstatus As String
    7. Private status As String
    8. Private test_id As String
    9. Private asil As String
    10. Public Function SetData(curReqRange As Range, ByVal header As Range, ByRef order() As String) As ClsReq
    11. 'Hier werden nur Private Members dieser Klasse gesetzt
    12. End Function
    13. Public Property Get getId() As String
    14. getId = id
    15. End Property


    Das Problem an obigem Klassen-Konstrukt ist nun, dass von .getId() in Klassenmodul "ClsModImport" in der Funktion CreateReqsByWorkSheet nichts (leerer String) zurückkommt, was aber komischerweise in der ("Zwischen-")Funktion CreateReqByLine im gleichen Klassenmodul funktioniert! Ich schätze, dass von Funktion CreateReqByLine irgendwas bei der Rückgabe des Klassenobjekts an die Funktion CreateReqsByWorkSheet nicht funktioniert. Ich denke, dass das nur eine Syntax-Sache ist oder auch eine Sichtbarkeitssache der Variablen ein Problem ist!
    Vielleicht kann mir ja jemand helfen! Danke!

    Ich weiß, dass ich hier einiges weggelassen habe, aber das was ich weggelassen habe sind nur Funktionen, von denen ich weiß, dass sie 100%ig funktionieren und keine Auswirkung auf mein eigentliches Problem haben. Der Übersichtlichkeit halber hab ich das getan.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „bandchef“ ()

    Ich habe den Code nur überflogen.

    Wenn ich das richtig verstanden habe, dann willst Du von einer Klasse auf die Variable einer anderen Klasse zugreifen. Wo die Variable deklariert wird, kann ich nicht sehen. Da Du eine neue Instanz einer Klasse nutzt, wird es wohl am besten sein, die gemeinsam genutzten Variablen in ein Modul zu legen. Nutzt Du mehrere Instanzen einer Klasse gleichzeitig, dann musst Du noch dafür sorgen, dass die Variablen auseinandergehalten werden. Dafür z.B. noch einen Index einführen und die gemeinsam genutzten Variablen als Typ anlegen, wo einmal der Index und einmal der Wert der ID abgelegt wird. Dafür dann das Management nicht vergessen, falls 'zwischendurch' eine Instanz wieder wegfällt.

    Das war ein möglicher Lösungsweg. Es gibt noch weitere, z.B. den Index direkt in der Klasse zu verwalten. Habe ich das falsch verstanden / überflogen, dann einfach ignorieren :D
    Gruß
    Peterfido

    Keine Unterstützung per PN!