Anzeige
Archiv - Navigation
1580to1584
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

Verständnisfrage

Verständnisfrage
18.09.2017 15:38:34
Franz
Hallo Fachleute,
ich habe kein Problem zu lösen, ich hab nur eine Frage zum Verständnis:
Folgender Code klappt wunderbar:
Dim z As Byte
For z = 115 To 129Step 2
Range("C4") = "Winzererstraße " & z
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Next
Will ich die Schleife aber andersrum laufen lassen, ..........
For z = 129 To 115 Step -2
Range("C4") = "Winzererstraße " & z
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Next
...... dannn geht "Dim z As Byte" nicht mehr, dann kommt es zum "Überlauf".
Mit z. B. "Integer" oder "Long" oder "Single" oder ..... klappt's.
Wird denn bei dieser Schleife z auch mal negativ? Oder woran liegt das.
Danke schonmal und Grüße
Franz

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verständnisfrage
18.09.2017 16:01:53
mmat
Hallo,
ich glaube du hast da einen Excel-Bug entdeckt.
Ein Byte kann natürlich nie Negativ sein. In deinem Beispiel wird Z auch nicht negativ werden. Trotzdem kommt der Fehler (auch bei mir).
Damit müssen wir wohl leben ...
vg, MM
AW: Verständnisfrage
18.09.2017 18:34:51
AlterDresdner
Hallo,
das reizvolle ist, dass der Überlauf bereits bei der ersten Zuweisung an z erfolgt.
Was auch immer der Herr Microsoft sich dabei gedacht hat...
Gruß der AlteDresdner
Das hat mit MS nichts zu tun, sondern mit den ...
18.09.2017 18:53:32
Luc:-?
…Grundlagen der EDV, AD,
und der Syntax und Kompilierung bzw Interpretation einer PgmmierSprache wie hier VBA. Macht man etwas nicht Vorgesehenes, muss man sich über die Konsequenzen nicht wundern… :-]
(Vgl meine AW!)
Gruß, Luc :-?
Anzeige
Anmerkung: 'As Byte' ist allenfalls für Texte ...
18.09.2017 18:30:24
Luc:-?
…akzeptabel, Franz,
kaum aber für LaufVariablen von Zyklen, vor allem nicht in umgekehrter Richtung, weil du den Step nicht mit einer negativen (Byte-)Variablen laufen lassen kannst, denn das würde auf Byte-Ebene ein anderes Verfahren als das für diese Aktion vorgesehene erfordern. Negative Zahlen sind nämlich scheinbar besonders groß → eine -2 sähe so aus: 11111110. Dadurch kommt bei Addition der Überlauf zustande, denn es wird immer addiert, nicht subtrahiert!
Gruß, Luc :-?
Besser informiert mit …
Anzeige
AW: Anmerkung: 'As Byte' ist allenfalls für Texte ...
18.09.2017 18:58:52
Luschi
Hallo Franz,
Zusatz zu Luc's Anmerkungen: Dim z As Byte
ist immer dann totaler Blödsinn, wenn der Inhalt von 'z' mit Zahlen verglichen wird,
da selbst der Vergleich mit der Zahl 0 den Datentyp '2-Intege'r ergibt, siehe: VarType(0)
Du sparst also nichts ein, wenn man z als mindestens Integer definierst, da alles andere über einen
interner Cast von Vba erledigt werden muß.
Das habe ich erst so richtig begriffen, seidem ich mich mit VB.Net/C# beschäftige.
Gruß von Luschi
aus klein-Paris
Danke Euch allen ....
18.09.2017 19:41:49
Franz
..... für Eure Antworten. Zwar hab ich nicht jedes einzelne Wort verstanden. Aber sinngemäß bin ich bissl weiter als vorher.
Danke und Grüße
Franz
Anzeige
AW: Verständnisfrage
18.09.2017 23:43:53
Daniel
Ich vermute mal, dass VBA den Step in eine eine "interne Variable" ablegt und als Datentyp für diese interne Variable den Typ verwendet, der durch den Schleifenzähler vorgegeben ist.
In deinem Fall gibtst du Byte vor, und das ist von 0-255 definiert und kann keine negativen Zahlen annehmen.
btw, auf einem moderenen Rechner ist die Verwendung von Byte als Datentyp nicht sinnvoll.
Es wird langsamer verarbeitet als Interger oder Long.
Der geringere Speicherplatzverbrauch dürfte sich auch nur dann bemerkbar machen, wenn du Arrays mit mehreren Millionen Werten verwendest.
Gruß Daniel
Anzeige
Das mit der LaufVariablen wird so sein, falls ...
19.09.2017 02:17:03
Luc:-?
…dafür nicht auch eine Variable benutzt wird, Daniel,
was uU ebenfalls zu Fehlern führen könnte, wenn die Datentypen nicht zueinander passen. Es sind aber auch nur numerische Werte für solche LaufVariablen zulässig.
Ein Byte besteht aus 8 Bit, in denen auch ein Negativ-Bit enthalten sein kann. Daraus ergäbe sich dann ein WerteBereich von -128 bis +127. Allerdings wdn rein numerisch-dezimale Daten gern auch ziffernweise codiert und gepackt dargestellt, so dass ein Halb-By (4 Bit) dann einer Ziffer entspräche. Da ist dann auch genug Platz für weitere Infos, so dass sich in einem By die DezimalZahlen von -99 bis +99 unterbringen ließen. Das ist aber pgm-intern nicht so und eine Byte-Variable kann tatsächlich nur den von dir genann­ten, positiven WerteBereich abdecken.
Es ist folglich wohl eher dem Zufall HausNrn zu danken, dass Franz nicht auch schon mit positiven Werten gescheitert ist…
Morrn, Luc :-?
Anzeige
AW: Verständnisfrage
19.09.2017 09:22:31
Franz
danke, Daniel,
so weit hab ich's mittlerweile kapiert, dass ich Byte tatsächlich nicht für Zahlen einsetzen sollte. Die Details, z. B. mit der Verarbeitungszeit werd ich in Zukunft berücksichtigen.
Danke und Grüße
Franz
AW: Verständnisfrage
19.09.2017 09:29:40
Daniel
du kannst Byte schon für Zahlen einsetzen, aber eben nur für Zahlen von 0-255 (es gibt auch höhere Hausnummern)
Der Datentyp Byte hat aber keinen Vorteil gegenüber den anderen Ganzzahltypen wie Integer oder Long.
Daher gibt es keinen Grund, ihn zu verwenden.
Gruß Daniel
kapiert - danke für den Zusatz o. T.
19.09.2017 09:31:34
Franz

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige