Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1864to1868
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Parameter nach Rückgabe verändert

Parameter nach Rückgabe verändert
26.01.2022 11:52:53
Tobias
Hallo liebe XLVBA Mitstreiter,
Ich stoße normalerweise selten auf Probleme die mich endgültig stutzig machen, aber hier habe ich so eins.
Der Code ist selbsterklärend, aber die Ausgaben sind nicht erwartet.

If warenSindAlleVerfuegbar = True Then
bool = kapazitaetsPruefung(bool)
MsgBox bool
End If
If bool = False Then Exit Sub

Public Function kapazitaetsPruefung(bool As Boolean)
Sheets("Produktion").Select
Range("f2").Select
If Selection.Value 
Msgbox-Ausgaben:
hier (in function)
WAHR (in function nach Zuweisung)
FALSCH (in sub nach function call)
Wo liegt mein Denk- oder Umsetzungsfehler?
Viele Grüße
Tobias

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Parameter nach Rückgabe verändert
26.01.2022 12:20:50
MCO
Hallo Tobias!
Eine Funktion gibt einen Wert zurück der in der Funktion festgelegt wird.
Den musst du noch zuweisen:
kapazitaetsPruefung = true
Nebenbei:
Die Bedingung "If warenSindAlleVerfuegbar = True " kannst du kürzen auf "If warenSindAlleVerfuegbar", denn die variable liefert ja schon TRUE oder FALSE
Gruß, MCO
AW: Parameter nach Rückgabe verändert
26.01.2022 12:59:51
Michael
Moin,
da Du den einen nicht vorhandenen Rückgabewert auch nicht weiterverarbeitest, muss er auch nicht zugewiesen werden. Ob die Function ihn ohne ein "as Boolean" in der Deklaration (also Public Function kapazitaetsPruefung(bool As Boolean) as Boolean) überhaupt zurück liefern würde, weiß ich auch nicht.
Mit scheint aber "bool" wird an kapazitaetsPruefung als Wert übergeben, nicht als Referenz. "bool" wird von kapazitaetsPruefung verändert, aber die aufrufende Stelle kriegt das nicht mit.
Versuche mal "Public Function kapazitaetsPruefung(ByRef bool As Boolean)"...nur so eine Idee.
Grüße
Michael
Anzeige
AW: Parameter nach Rückgabe verändert
26.01.2022 14:01:35
Peter
Oben:

bool = kapazitaetsPruefung()
Unten:

kapazitaetsPruefung = Sheets("Produktion").Range("f2") >= 1
If not kapazitaetsPruefung then _
MsgBox "Keine freien Produktionsstätten mehr verfügbar!"

AW: Parameter nach Rückgabe verändert
26.01.2022 12:38:39
peterk
Hallo
2 Möglichkeiten

Public Function kapazitaetsPruefung(bool As Boolean) as boolean
Sheets("Produktion").Select
Range("f2").Select
If Selection.Value 
oder

If warenSindAlleVerfuegbar = True Then
kapazitaetsPruefung(bool)
MsgBox bool
End If
Public Function kapazitaetsPruefung(byRef bool As Boolean)
Sheets("Produktion").Select
Range("f2").Select
If Selection.Value 
Peter
Anzeige
AW: Parameter nach Rückgabe verändert
26.01.2022 12:51:51
Tobias
Vielen lieben Dank MCO und Peter!
Da sieht man wie oberflächlich ich mich bisher mit den Funktionen beschäftigt habe.
Entweder hatte ich den code aus Faulheit direkt im sub abgelegt, oder Funktionen gebaut, die lediglich irgendwas erledigen, ohne Rückgabewert.
Jetzt beschäftige ich mich noch mal intensiver mit dem Thema, auch mit byref und byval.
An MCO:
if [boolean] ohne "=true" kenne ich bereits von OO-Sprachen wie C++ und Java. Ich war mir aber bezüglich vba unsicher, da längere Zeit nichts gemacht und VBA gilt ja als recht einfach gehaltene und alte Sprache, daher stehen da noch die "Nr.-Sicher"-Ausdrücke. Ich glaube in meinem ganzen Code kann man noch einiges kürzen aber solange es die Laufzeit nicht beeinträchtigt, möchte ich keinen Schönheitspreis gewinnen :)
Anzeige
AW: Parameter nach Rückgabe verändert
26.01.2022 13:16:59
Theo
Hi,
wenn Du eine Funktion nutzen möchtest, dann würde ich auch einen sinnvollen Wert dahin übergeben, sonst kannst Du auch ein Sub verwenden.
Für Dein Beispiel könntest Du z.b die Zelle F2 übergeben (und auch die ganzen sinnlosen Selects vermeiden):
Aufruf z.B. mit
bool = kapazitaetsPruefung(Sheets("Produktion").Range("f2"))

Public Function kapazitaetsPruefung(Rng As Range) As Boolean
If Rng.Value 
Viel Spass damit!
Theo
AW: Parameter nach Rückgabe verändert
26.01.2022 13:26:16
Tobias
Vielen lieben Dank, Theo!
Um so kurz und effizient zu schreiben, muss ich mich langsam mal wieder "eingrooven" in vba.
Anzeige
AW: Parameter nach Rückgabe verändert
26.01.2022 13:22:44
GerdL
Moin Tobias,
die Variablen vom Typ Boolean ausdrüclich auf "=True" zu prüfen ist zwar überflüssig, aber nicht falsch.
Daneben kann man Funktionen auf eine andere Weise nutzen.

Sheets("Produktion").Range("F1") = 42 'Demowert
'If warenSindAlleVerfuegbar = True Then
bool = kapazitaetsPruefung(Sheets("Produktion").Range("F1").Value)
MsgBox bool
'End If


Public Function kapazitaetsPruefung(ByVal Wert As Double, Optional Vergleichswert As Long = 1) As Boolean
If CLng(Wert) >= Vergleichswert Then kapazitaetsPruefung = True
End Function
Gruß Gerd
Anzeige
AW: Parameter nach Rückgabe verändert
26.01.2022 13:29:04
Tobias
Danke Gerd,
das sieht mindestens genauso effizient aus wie Theos Vorschlag. Werde ich auch testen.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige