Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Funktionen in Klassen aus Modul aufrufen

Funktionen in Klassen aus Modul aufrufen
22.04.2015 14:26:16
Malte
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

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Funktionen in Klassen aus Modul aufrufen
22.04.2015 14:59:34
Nepumuk
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

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

Anzeige
AW: Funktionen in Klassen aus Modul aufrufen
22.04.2015 15:15:55
Nepumuk
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

AW: Funktionen in Klassen aus Modul aufrufen
22.04.2015 15:19:49
Malte
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

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

AW: Funktionen in Klassen aus Modul aufrufen
22.04.2015 15:27:02
Malte
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

Anzeige
AW: Funktionen in Klassen aus Modul aufrufen
22.04.2015 15:32:13
Nepumuk
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

Anzeige
AW: Funktionen in Klassen aus Modul aufrufen
22.04.2015 16:00:30
Malte
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ß

Anzeige
AW: Funktionen in Klassen aus Modul aufrufen
22.04.2015 16:09:48
Nepumuk
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

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

Infobox / Tutorial

Funktionen in Klassen aus Modul aufrufen


Schritt-für-Schritt-Anleitung

  1. Klassenmodul erstellen: Erstelle ein neues Klassenmodul in Excel VBA und nenne es clsStoff. Füge die folgenden Eigenschaften und Funktionen hinzu:

    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
  2. Modul zur Verwendung der Klasse erstellen: Erstelle ein Standardmodul und füge die folgende Sub-Prozedur hinzu, um die Klasse zu verwenden:

    Sub Test()
       Dim Stoff_1 As clsStoff
       Set Stoff_1 = New clsStoff
       Stoff_1.func_PR_Parameter_aT(Temperatur)
    End Sub
  3. Zweite Klasse erstellen: Erstelle eine zweite Klasse namens clsMix und implementiere die gewünschten Eigenschaften und Funktionen:

    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
  4. Aufruf der zweiten Klasse: Modifiziere die Sub-Prozedur im Modul, um die zweite Klasse korrekt aufzurufen:

    Sub Test(ByVal Stoff_1 As clsStoff)
       Dim mixL As clsMix
       Set mixL = New clsMix
       mixL.func_b_mix(Stoff_1.aT, Stoff_1.aT, Stoff_1.aT)
    End Sub

Häufige Fehler und Lösungen

  • Fehler beim Kompilieren: Wenn der Fehler "Erwartet: =" erscheint, dann stelle sicher, dass Du die Parameter korrekt übergibst. Verwende ByRef für Parameter, die als Referenz übergeben werden sollen:

    Sub Test(ByRef Stoff_1 As clsStoff)
  • Falsche Anzahl an Parametern: Achte darauf, dass die Anzahl der Parameter, die Du übergibst, mit der Anzahl übereinstimmt, die die Funktion erwartet. Wenn Du der Funktion func_b_mix nur drei Parameter übergibst, während sie vier erwartet, wird ein Fehler angezeigt.

  • Aufruf ohne Call: Wenn Du eine Funktion ohne Call aufrufst und Klammern um die Parameter verwendest, wird der Parameter als Wert und nicht als Referenz übergeben. Verwende Call oder lasse die Klammern weg.


Alternative Methoden

  • Anstelle von Funktionen kannst Du Sub-Prozeduren verwenden, wenn Du keine Rückgabewerte benötigst. Dies kann den Code klarer und einfacher zu verstehen machen.

  • Verwende Access VBA, um ähnliche Funktionen zu implementieren. Obwohl die Syntax leicht unterschiedlich sein kann, bleibt das Grundkonzept dasselbe.


Praktische Beispiele

Hier ist ein einfaches Beispiel, um die Verwendung eines vba klassenmodul beispiel zu demonstrieren:

Public Sub Beispiel()
    Dim stoff As New clsStoff
    Dim mix As New clsMix

    stoff.func_PR_Parameter_aT(100) ' Temperatur setzen
    mix.func_b_mix(0.5, stoff.aT) ' Konzentration und b_1 setzen
End Sub

Dieses Beispiel zeigt, wie Du Klassen und deren Funktionen in einem Modul aufrufen kannst.


Tipps für Profis

  • Verwende Option Explicit am Anfang Deiner Module, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.

  • Halte Deine Klassen modular und gut strukturiert, um die Wartbarkeit und Lesbarkeit des Codes zu verbessern.

  • Nutze Kommentare, um den Code zu dokumentieren, insbesondere wenn Du komplexe Logik in Deinen Funktionen oder Klassen implementierst.


FAQ: Häufige Fragen

1. Wie übergebe ich Parameter in einer VBA-Funktion?
Du kannst Parameter in einer VBA-Funktion übergeben, indem Du sie in der Funktionsdefinition angibst, z.B. Function MyFunction(ByVal Parameter As String).

2. Was ist der Unterschied zwischen Sub und Function in VBA?
Eine Sub führt eine Aktion aus, während eine Function einen Wert zurückgibt. Verwende Function, wenn Du einen Wert benötigst, und Sub, wenn Du keine Rückgabe benötigst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige