Funktionen in Klassen aus Modul aufrufen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Funktionen in Klassen aus Modul aufrufen
von: Malte
Geschrieben am: 22.04.2015 14:26:16

Hallo,
ich komme momentan mit meinen Klassen nicht weiter.
Ich habe folgende Klasse:
clsStoff hier befindet sich der Get-Aufruf sowie eine Funktion:

Public Property Get aT() As Double
    aT = paT
End Property
Function func_PR_Parameter_aT(ByVal Temperatur As Double) As Double
    paT = pac * (1 + pm * (1 - (Temperatur / pKrit_Temp) ^ 0.5)) ^ 2
End Function

Aus dem Modul kann ich dann wie folgt die Fkt aufrufen:
Sub Test()
Dim Stoff_1 as clsStoff
Stoff_1 = New clsStoff
Stoff_1.func_PR_Parameter_aT(Temperatur)
End Sub

Funktioniert einwandfrei.
Nun habe ich eine zweite Klasse clsMix, ebenfalls mit Get-Aufruf und Funktion:
Public Property Get b_mix() As Double
    b_mix = pB_mix
End Property
Function func_b_mix(ByVal Konzentration As Double, ByVal b_1 As Double) As Double
    pB_mix = Konzentration * b_1 + (1 - Konzentration) * 2
End Function

Aus dem Modul möchte ich Folgenden Aufruf machen:
Sub Test(byval Stoff_1 as clsStoff)
dim mixL as clsMix
mixL = New clsMix
mixL.func_b_mix(Stoff_1.aT,Stoff_1.aT,Stoff_1.aT)
End Sub
Nun erscheint jedoch immer der Fehler "Fehler beim Komplilieren: Erwartet: ="
Kurz gefasst. Wenn ich nur eine Variable übergebe funktioniert es. Wenn ich mehrere übergebe erscheint der Fehler.
Was mache ich falsch?
Vielen Dank!
Gruß!
Malte

Bild

Betrifft: AW: Funktionen in Klassen aus Modul aufrufen
von: Nepumuk
Geschrieben am: 22.04.2015 14:59:34
Hallo,
1. Musst du die Klasse als Referenz übergeben: ByRef Stoff_1 as clsStoff
2. Habe ich keine Lust das nachzubauen, also Mappe hochladen.
Gruß
Nepumuk

Bild

Betrifft: AW: Funktionen in Klassen aus Modul aufrufen
von: Malte
Geschrieben am: 22.04.2015 15:08:07
Hallo,
ist im Anhang!
https://www.herber.de/bbs/user/97237.xlsm
Vielen Dank!
Gruß!

Bild

Betrifft: AW: Funktionen in Klassen aus Modul aufrufen
von: Nepumuk
Geschrieben am: 22.04.2015 15:15:55
Hallo,
1. Fehlt da ein Parameter denn die Funktion func_a_mix erwartet 4 du übergibst aber nur 3.
2. Warum machst du da Funktionen in die Klassen wenn du keinen Wert zurückhaben willst? Also mach Sub-Prozeduren daraus.
Gruß
Nepumuk

Bild

Betrifft: AW: Funktionen in Klassen aus Modul aufrufen
von: Malte
Geschrieben am: 22.04.2015 15:19:49
Ja, einen habe ich vergessen, da muss noch der a12 als letzter Parameter rein. Aber der Fehler kommt nach wie vor.
Ich hab gelesen, dass man bei Berechnungen Funktionen machen sollte, um Fehler abzufangen. Werde es aber zu Sub-Prozeduren ändern.
Danke!
Gruß
Malte

Bild

Betrifft: AW: Funktionen in Klassen aus Modul aufrufen
von: Nepumuk
Geschrieben am: 22.04.2015 15:23:15
Hallo,
und was ist a12 sprich welche Eigenschaft oder Methode ist das damit ich das zum testen nachbauen kann?
Gruß
Nepumuk

Bild

Betrifft: AW: Funktionen in Klassen aus Modul aufrufen
von: Malte
Geschrieben am: 22.04.2015 15:27:02
In dem Modul mBinaer in der Sub-Prozedur "Berechnung_Binaer" wird a12 direkt berechnet.

a12 = (Stoff_1.aT * Stoff_2.aT) ^ 0.5
Dadrunter ist der nicht-funktionierende Aufruf, der somit lauten muss:
mixL.func_a_mix(Stoff_1.KonzL,Stoff_1.aT, Stoff_2.aT,a12)
(bzw. später als Sub, was mir auch programmiertechnisch sinnvoller erscheint als eine Funktion ohne Rückgabe)
Gruß
Malte

Bild

Betrifft: AW: Funktionen in Klassen aus Modul aufrufen
von: Nepumuk
Geschrieben am: 22.04.2015 15:32:13
Hallo,
wenn du eine Funktion in einer Klasse aufrufen willst, ohne den Rückgabeparameter zu beachten, dann musst du entweder Call davor setzen (Call mixL.func_a_mix(Stoff.....) oder die Klammern um die Parameter weg lassen. Ich lauf da übrigens in eine Endlosschleife denn S ändert sich nie.
Gruß
Nepumuk

Bild

Betrifft: AW: Funktionen in Klassen aus Modul aufrufen
von: Malte
Geschrieben am: 22.04.2015 16:00:30
Hallo,
ja da fehlt noch einiges an Code. Stehe noch am Anfang.
Mit Call gehts wunderbar.
Komischerweise geht es bei

Public Sub Sub_PR_Parameter_aT(ByVal Temperatur As Double)
    paT = pac * (1 + pm * (1 - (Temperatur / pKrit_Temp) ^ 0.5)) ^ 2
End Sub
Auch ohne Call im Modul!
Ich setzt von nun an ein Call davor und ändere die Functions ohne Rückgabe zu Subs um.
Vielen Dank!
Gruß

Bild

Betrifft: AW: Funktionen in Klassen aus Modul aufrufen
von: Nepumuk
Geschrieben am: 22.04.2015 16:09:48
Hallo,
da hast du ja auch nur einen Parameter. Wenn du eine Sub oder Funktion ohne Call aufrufst und eine Klammer um den Parameter machst, dann wird dieser Parameter als Wert und nicht als Referenz übergeben.
ein Beispiel:

Public Sub Test1()
    Dim l As Long
    l = 999
    test2 (l)
    Call test2((l))
    Call test2(l)
End Sub

Public Sub test2(i As Integer)
    MsgBox i
End Sub

Der dritte Aufruf wird angemeckert weil hier der Parameter als Referenz übergeben werden soll und die Datentypen nicht zusammenpassen.
Gruß
Nepumuk

Bild

Betrifft: AW: Funktionen in Klassen aus Modul aufrufen
von: Malte
Geschrieben am: 22.04.2015 16:16:15
Ach so!
Danke für die Erklärung. Dann macht alles Sinn!
Vielen Dank!
Gruß!

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Funktionen in Klassen aus Modul aufrufen "