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

Integerzähler nur bis 91

Integerzähler nur bis 91
Ludwig
Hallo Experten
In einer Function habe iche eine Schleite kontrolliert durch den "Zähler".
Bei erreichen von Zähler= 92 unterbricht die Schleife ohne Ergebnisse!
Dim Zähler As Integer
For Zähler = 1 To nB Step 1
....
Next Zähler
Woran kann das liegen?
Vielen Dank für die Antwort im Voraus.
MfG
Ludwig

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

Betreff
Benutzer
Anzeige
welchen Wert hat nB ? o.T.
16.01.2012 12:20:18
Josef
« Gruß Sepp »

AW: Integerzähler nur bis 91
16.01.2012 12:48:11
Rudi
Hallo,
Woran kann das liegen?
daran, dass Zähler=nB ist.
Gruß
Rudi
P.S.: Verwende keine Umlaute in VBA.
AW: Integerzähler nur bis 91
16.01.2012 13:47:37
Ludwig
Hallo Rudi
Sorry hätte ich erwähnen sollen, nB= 140!
Gruß Ludwig
AW: Integerzähler nur bis 91
16.01.2012 13:56:26
Rudi
Hallo,
liegt nicht an dem Fragment.
Mehr Code/ Mappe.
Gruß
Rudi
Was heißt unterbricht
16.01.2012 14:47:45
Harald
Hallo Ludwig,
was heißt "unterbricht"?
Gibt es einen Fehler?
Springt das Programm möglicherweise auf Grund einer "On Error" Anweisung an eine andere Stelle?
Wird evtl. "nb" innerhalb der Schleife geändert, so dass es gar nicht dem von Dir erwarteten 140 entspricht?
Gruß
Harald
Anzeige
AW: Was heißt unterbricht
17.01.2012 11:58:49
Ludwig
Hallo Harald
Kann leider erst jetzt weiter machen - sorry!
- Nein, es gibt keine Fehlermeldung. Kontrolliere ich die Schleife im VBA durch einen Haltepunkt, springt VBA nach erreichen von Zaehler= 92 direkt aus dieser Schleife, aus der finction.
- nb wird in der Schleife nicht geändert!
- Es gibt keine OnError Anweisung in der function!
hier die ganze Function:
Function redFlaechentraegheit( _
Da As Single, _
Di As Single, _
Dlk As Single, _
Db As Single, _
nB As Single)
Dim Zwert, Z_118, Z_119, Z_121 As Single
Dim Zaehler As Integer
Zwert = 0
Z_118 = PI / 64 * (Da ^ 4 - Di ^ 4)
Z_119 = PI / 64 * Db ^ 4
For Zaehler = 1 To nB Step 1
Z_121 = Z_119 + (PI / 4 * Db ^ 2 * (Abs(Cos(Zaehler * 360 / nB * PI / 180) * Dlk / 2)) ^ 2)
Zwert = Zwert + Z_121
Debug.Print "redFlaechentraegheit =" & (Z_118 - Zwert) / 1000000000000#
Debug.Print "Zähler =" & Zaehler
Next Zaehler
redFlaechentraegheit = (Z_118 - Zwert) / 1000000000000#
End Function

MfG
Ludwig
Anzeige
AW: Was heißt unterbricht
17.01.2012 15:04:52
Harald
Hallo Ludwig,
leider kenne ich nicht die Werte der Übergabeparameter.
Zunächst fällt auf, dass der Rückgabetyp der Funktion nicht definiert ist. Normalerweise müsste das prinzipiell so aussehen:
Function x() As Typ
End Function
Wobei "Typ" der Typ des Funktionsergebnisses ist, also bei Dir das, was in der Zeile
redFlaechentraegheit = (Z_118 - Zwert) / 1000000000000#
berechnet wird (single oder double?).
Zum Testen habe ich die Funktion mal als Subroutine umgeschrieben:
Sub test()
Dim Da As Single, _
Di As Single, _
Dlk As Single, _
Db As Single, _
nB As Single
Const Pi = 3.14
Dim Zwert, Z_118, Z_119, Z_121 As Single
Dim Zaehler As Integer
Dim redFlaechentraegheit As Double
nB = 254
Zwert = 0
Z_118 = Pi / 64 * (Da ^ 4 - Di ^ 4)
Z_119 = Pi / 64 * Db ^ 4
For Zaehler = 1 To nB Step 1
Z_121 = Z_119 + (Pi / 4 * Db ^ 2 * (Abs(Cos(Zaehler * 360 / nB * Pi / 180) * Dlk / 2)) ^ 2)
Zwert = Zwert + Z_121
Debug.Print "redFlaechentraegheit =" & (Z_118 - Zwert) / 1000000000000#
Debug.Print "Zähler =" & Zaehler
Next Zaehler
redFlaechentraegheit = (Z_118 - Zwert) / 1000000000000#
End Sub
Dabei hält bei mir der Debugger in der Zeile
Z_121 = Z_119 + (Pi / 4 * Db ^ 2 * (Abs(Cos(Zaehler * 360 / nB * Pi / 180) * Dlk / 2)) ^ 2)
mit einem Laufzeitfehler 6 (Überlauf) an. Der Zaehler ist in diesem Moment =92 !
Probier mal "Zähler" als Long zu deklarieren (statt Integer). Bei mir läuft die Subroutine dann über 92 weiter. Ob das Ergebnis stimmt, kann ich nicht verifizieren.
Übrigens täte es der Genauigkeit auch gut, wenn Du statt Single grundsätzlich Double verwenden
würdest. Der Fehler, der durch das Aufaddieren innerhalb der Schleife bei begrenzter Genauigkeit entsteht, ist dadurch nicht so groß.
Gruß
Harald
Anzeige
AW: Was heißt unterbricht
18.01.2012 08:17:50
Ludwig
Hallo Harald
Vielen Dank, das war es! Den Zaehler als Long deklariert und schon läuft die Schleife durch!
Nochmals DANKE!
Ich habe auch die real-Zahlen als Double deklariert - bringt jedoch das gleiche Ergebnis ist aber eben technisch sauberer!
Zur Erklärung: Die oben stehende Programierung habe ich noch von Excel 4 mit rüber genommen - ist deswegen "quick and dirty"!
MfG
Ludwig
AW: Was heißt unterbricht
18.01.2012 08:35:15
Harald
Hallo Ludwig,
ich kann nur vermuten, dass das an der Art liegt, wie der Ausdruck innerhlab des Cosinus ausgewertet wird. Prinzipiell lässt sich mit Integer eine Zahl bis +32767 darstellen. Alsol sollte Zähler kleiner gleich 140 kein Problem sein. Vermutlich rechnet Excel aber 360*Zähler auch als Integer.
360*91 = 32760, also gerade noch kleiner als die "magische" Grenze für Integer.
360*91 = 33120, also zu groß für Integer, daher der Überlauf.
Ich weiß nicht, wie groß nB werden kann, aber Long geht bis +2147483647. Damit kann Zähler maximal 5965232 werden. Reicht vermutlich. Wenn Du aber auf Nummer sicher gehen willst, dann empfehle ich Dir, mit Double zu rechnen. Da der Tähler aber sinnvollerweise eine ganze Zahl bleibt, ist eine Typumwandlung nötig. Das könnte dann so aussehen:
..cos( Cdbl(Zähler)* 360.0 / nB * Pi / 180.0)...
Übrigens könntest Du die Berechnung gut beschleunigen, wenn Du den Ausdruck
360.0 * Pi / 180.0 (übrigens = 2*Pi) als Konstante 2Pi = 6.28318... definierst und die Formel zu
...cos( Cdbl(Zähler)* 2Pi / nB)...
umschreibst. Dann entfällt die Berechnung je Schleifendurchlauf.
Gruß
Harald
Anzeige
AW: Was heißt unterbricht
18.01.2012 14:11:59
Ludwig
Hallo Harald
Ja, Du hast recht!
Sollte die Functions alle mal in diesem Sinne überarbeiten.
MfG
Ludwig

144 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige