Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1636to1640
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

Endlosschleife aber warum?

Endlosschleife aber warum?
03.08.2018 13:37:44
Thorsten
Hallo Miteinander,
mir ist nicht klar warum ich im folgenden Quellcode eine Endlosschleife erhalte.
Ich wollte in einer Schleife die Funktionalität einer Funktion testen.
Diese Funktion liefert zu einer 8-Bit-Zahl die entsprechende Dezimalzahl zurück.
Zielmeldung sollte sein 128 192 224 240 248 252 254 255.
Allerdings erhalte ich eine Endlosschleife.
Ersetze ich im Funktionsaufruf die Zählvariable durch einen festen Wert - dann geht es.
Irgendwas scheint in VBA anders zu sein als in anderen Programmiersprachen.
Vielleicht könnte jemand von Euch drüber schauen.
Vielen Dank & Gruß
Thorsten Geßler
Function getDecimalFromDual(b As Byte) As Byte
Dim faktor As Byte
faktor = 128
getDecimalFromDual = 0
Do While b > 0
getDecimalFromDual = getDecimalFromDual + faktor
faktor = faktor \ 2  'ganzzahlige Division
b = b - 1
Loop
End Function

Sub teste()
Dim ausgabe As String
Dim zaehler As Byte
zaehler = 1
Do While zaehler 

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Endlosschleife aber warum?
03.08.2018 13:45:06
Hajo_Zi
Ich komme mit Falsch sofort raus und mit wahr nach kurzer Zeit.
nur wenige schauen auf Deinen Rechner und sehen die Datei.
Ich möchte gerne den Fehler im Original sehen.
Ich baue keine Datei nach. Die Zeit hat schon jemand investiert.
Ein Nachbau sieht meist anders aus als das Original. Darum sollte das Original verlinkt werden.
Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, kannst du diese Daten anonymisieren bzw. pseudonymisieren.
Benutze hier im Forum die Funktion zum hochladen. Falls Du die nicht benutzen möchtest beachte, von unsicheren Servern wie z.B. www.file-upload.net lade ich keine Datei runter. (lt. Einschätzung meines Virenprogramms)

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Anzeige
AW: Endlosschleife aber warum?
03.08.2018 14:08:37
Nepumuk
Hallo Thorsten,
in der Funktion wird b auf 0 gesetzt und mit diesem Wert kehrt die Variable zurück in die Sub. Das kannst du so verhindern:
Function getDecimalFromDual(ByVal b As Byte) As Byte

Gruß
Nepumuk
Anzeige
AW: Endlosschleife aber warum?
03.08.2018 14:19:07
Thorsten
Vielen vielen Dank, es funktioniert.
Nur noch eine kleine Frage:
Wenn die lokale Variable b auf 0 gesetzt wurde - warum dann die Endlosschleife?
Dann hätte die Function doch gar nicht laufen dürfen ...
... oder wird zaehler auf 0 gesetzt? Wenn ja ist das ja richtig strange .....
Viele Grüße
Thorsten Geßler
AW: Endlosschleife aber warum?
03.08.2018 14:29:31
daniel
Hi
zur Erläuterung:
bei der Übergabe eines Parameters gibt es zwei Varianten:
a) byVal: hier wird nur der Wert an die Funktion übergeben, in der Funktion entsteht eine neue unabhängige Variable
b) byRef: hier wird keine neue Variable erstellt, es wird eine Verknüpfung auf die Variable in der Hauptdatei übergeben, dh b und zaehler sind intern dieselbe Variable, nur eben mit unterschiedlichem Namen. Dh jede Änderung von b wirkt sich 1:1 auf zaehler aus.
Stells dir wie einen Schubladenschrank vor.
mit byVal wird eine neue Schublade mit einem neuen Namen verwendet und der Wert in die neue Schublade kopiert.
mit byRef wird dieselbe Schublade weiter verwendet, es wird nur ein zweites Namensschild auf die Schublade geklebt.
oder wie beim Kopieren einer Datei im Explorer:
man kann eine Datei in ein neues Verzeichnis kopieren, oder man kann eine Verknüpfung auf diese Datei erstellen.
wenn man bei der Parameterübergabe keine speziellen Angaben macht, dann wird automatisch der Typ byRef verwendet (warum auch immer)
Gruß Daniel
Anzeige
AW: Endlosschleife aber warum?
03.08.2018 14:32:11
Thorsten
Hallo Daniel,
jetzt macht alles Sinn.
perfekt!!
vielen Dank und viele Grüße
Thorsten Geßler
AW: Endlosschleife aber warum?
03.08.2018 14:34:24
Nepumuk
Hallo Thorsten,
richtig, denn zaehler in der Sub und die Variable b in der Function sind ohne den Zusatz im Funktionsaufruf ein und das selbe.
Du hast die Function also immer mit dem Wert 1 aufgerufen und von ihr immer den Wert 0 zurückbekommen. Das du eine Abfrage in der Sub hast die Abbricht wenn zaehler den Wert 8 hat, den aber nie erreicht hast du eine Endlosschleife.
Gruß
Nepumuk
AW: Endlosschleife aber warum?
03.08.2018 14:59:57
Thorsten
Danke!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige