Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
956to960
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
956to960
956to960
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Fehler 6 Überlauf

Fehler 6 Überlauf
02.03.2008 15:27:00
Volti
Hallo zusammen,
wer hilft mir mal schnell auf die Sprünge?
Schreibe gerade ein Tool zur einfachen Ermittlung des Inhalts von Zip-Dateien. Hierbei müssen für die Größenermittlung z.B. für "Original" und "Packed" vierbytecodierte Felder in eine Zahl verwandelt werden.
Das mache ich mit folgender Function:

Function GetValue(S AS STRING) AS STRING
Dim A As Long
Dim B As Long
Dim C As Long
Dim D As Long
' On Error Resume Next
S = Right(Chr(0) & Chr(0) & Chr(0) & Chr(0)  & S, 4)
A = Asc(Left(S, 1))
B = Asc(Mid(S, 2, 1)) * 256
C = Asc(Mid(S, 3, 1)) * 65536
D = Asc(Right(S, 1)) * 256 * 65536
GetValue = Trim(Str(D + C + B + A))
End Function


Sobald einer der Werte B bis D über 32784 (IntegerMax) kommt, erhalte ich Fehlermeldung "6 Überlauf". Mach hier schon 'ne halbe Stunde rum. Aber mein Excel 97 will nicht.
Jemand eine Idee hierzu?
viel Grüße Karl-heinz

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

Betreff
Datum
Anwender
Anzeige
AW: Fehler 6 Überlauf
02.03.2008 15:34:14
ransi
HAllo Heinz
was sind "vierbytecodierte Felder" ?
Ich nehme an das sit der String den du der Funktion übergibst.
Hast du mal ein Beispiel für so ein "vierbytecodiertes Feld" ?
ransi

AW: Fehler 6 Überlauf
02.03.2008 15:49:00
Volti
Hallo ransi,
vielleicht ein bischen unglücklich ausgedrückt.
Es ist ein Binärstring mit vier Byte Länge. Hier ein paar Beispiele, wobei das Sterchnen als Platzhalter für CHR(0) gilt. (* hat eigentlich die ASC-Nr 42)
Der String "A***" würde einen Wert von 65 ergeben.
Der String "0B**" würde einen Wert von 48 + 66*256 = 16944 ergeben
Der String "*A**" ergibt demnach 65*256 = 16640
usw.
In einer andren Programmiersprache gibt es eine direkte Formel zur Umrechnung. In VBA kenne ich keine und versuche mi rdie Zahlen selbst zusammenzubasteln.
Gruß
KH

Anzeige
AW: Fehler 6 Überlauf
02.03.2008 16:27:00
ransi
HAllo
Ich habs glaube ich noch nicht verstanden, trotzdem ein Versuch:
Option Explicit

Public Sub aufruf()
MsgBox GetValue("0B**")
End Sub

Function GetValue(S As String) As String
Dim I As Integer
Dim D
S = Replace(S, "*", Chr(0))
For I = 1 To Len(S)
    D = D + Asc(Mid(S, I, 1)) * 256 ^ (I - 1)
Next
GetValue = D
End Function

Wenn es das nicht ist, bin ich raus.
Stell dann einfach "Frage noch offen".
Das ist bestimmt nicht schwer, aber mit den Bits und bytes hab ich es nicht so...
ransi

Anzeige
AW: Fehler 6 Überlauf
02.03.2008 18:56:43
Volti
Hallo ransi,
vielen Dank. das ist es; das funktioniert mit dieser doch eleganten Lösung.
Zwar war das nicht die Antwort auf meine Frage, bei ich mich wunderte, dass es Überlauf ab einem Wert von 32768 gab, wo doch die Variablen als LONG declariert waren. Aber ich verzichte auf weiteres Nachforschen, denn es geht ja jetzt mit Deiner Methode. Super.
Übrigens, den Replace-Befehl, (bakannt aus anderen Progsprachen) gibt es wohl unter XLS97 noch nicht? Der ist hier unbekannt und führt zu Fehler.
Den code habe ich aber sowieso rausgenommen, denn das mit dem * habe ich nur angeführt, weil ich das 0-Zeichen (CHR(0) hier im Forum ja nicht eingeben konnte.
viele Grüße
Karl-Heinz

Anzeige
AW: Fehler 6 Überlauf
02.03.2008 21:31:00
Nepumuk
Hi ransi,
warum so kompliziert? Ist doch'n glatter Einzeiler:
GetValue = Asc(Mid(S, 1, 1)) + (Asc(Mid(S, 2, 1)) * &H100) + (Asc(Mid(S, 3, 1)) * &H10000) + (Asc(Mid(S, 4, 1)) * &H1000000)

Gruß
Nepumuk

AW: Fehler 6 Überlauf
03.03.2008 19:41:21
Volti
Hallo Nepumuk,
beim Ausprobieren Deiner Version erhalte ich auch den Fehler 6 Überlauf. Siehe meine Eingangsfrage.
Gruß
KH

Anzeige
AW: Fehler 6 Überlauf
04.03.2008 08:25:00
Nepumuk
Hallo KH,
GetValue muss als Double deklariert sein.
Gruß
Nepumuk

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige