Microsoft Excel

Herbers Excel/VBA-Archiv

VBA - Überlauffehler nach "Aufräumaktion"


Betrifft: VBA - Überlauffehler nach "Aufräumaktion"
von: Christoph
Geschrieben am: 29.11.2018 11:51:55

Schönen guten Morgen Leute,

ich bin als VBA-Anfänger beim "aufräumen" eines kleinen Makros auf einen Fehler gestoßen, den ich mir nicht erklären kann.

Ich hatte einen ursprünglichen Code der wie folgt sehr gut seine Arbeit gemacht hat:

Sub Ersten_Wert_ausgeben()
'
' Makro12 Makro
'

'
Dim Spalte As Integer
    Spalte = 5
    Do While ActiveSheet.Cells(8, Spalte) <> 0
    Dim Zeile As Integer
    Zeile = 41
        Do Until ActiveSheet.Cells(Zeile, Spalte) <> 0
        Zeile = Zeile + 1
        Loop
    ActiveSheet.Cells(Zeile, Spalte).Copy
    ActiveSheet.Cells(25, Spalte).PasteSpecial xlPasteValues
    Spalte = Spalte + 1
    Loop
    
End Sub
Hier sind die Variablen wild im Code definiert. Ich wollte nun etwas aufräumen und die Deklarationen an den Anfang verlagern. Also quasi:

Sub Ersten_Wert_ausgeben()

Dim Spalte As Integer
    Spalte = 5
Dim Zeile As Integer
    Zeile = 41

Do While ActiveSheet.Cells(8, Spalte) <> 0
    Do Until ActiveSheet.Cells(Zeile, Spalte) <> 0
    Zeile = Zeile + 1
    Loop
ActiveSheet.Cells(Zeile, Spalte).Copy
ActiveSheet.Cells(25, Spalte).PasteSpecial xlPasteValues
Spalte = Spalte + 1
Loop

End Sub
Doch nun wird ein Überlauffehler bezüglich der "Zeile = Zeile +1" ausgegeben. Ändert sich durch das "nach vorne verlagern" etwa die Gültigkeit der Deklaration? Oder liegt der Fehler gar ganz wo anders?

Würde mich sehr über erhellende Einblicke freuen.

Ciao

  

Betrifft: AW: VBA - Überlauffehler nach "Aufräumaktion"
von: Zwenn
Geschrieben am: 29.11.2018 12:03:00

Hallo Christoph,

der Datentyp Integer kann nur Werte zwischen -32.768 und 32.767 aufnehmen. Wenn Dein Makro zur Zeile 32.768 kommt, gibt es einen Überlauffehler. Ändere den Datentyp in der Deklaration auf Long. Der Datentyp Long kann Zahlen zwischen -2.147.483.648 und 2.147.483.647 aufnehmen. Damit sind in jedem Fall alle möglichen Zeilenwerte in einer Excel-Tabelle abgedeckt.

Du zählst ausserdem die Spalten immer weiter hoch. Da nutzt Dir die Änderung des Datentyps aber nix. Auch wenn es unwahrscheinlich ist, kann es hier natürlich auch zum Überlauf-Fehler kommen.

Hier noch eine Übersicht zu den Datentypen insgesamt:
http://www.herber.de/mailing/vb/html/vagrpdatatype.htm

Viele Grüße,

Zwenn


  

Betrifft: AW: VBA - Überlauffehler nach "Aufräumaktion"
von: Zwenn
Geschrieben am: 29.11.2018 12:17:00

Hallo nochmal,

sehe grade, dass Du die Initialisierung Zeile = 41 auch nach oben gezogen hast. Die lag vorher in der ersten Do-Schleife und wurde somit bei jedem Durchlauf der äußeren Schleife zurück auf 41 gesetzt, was wohl auch so sein soll, weil Du gehst ja Spaltenweise vor. Also einfach Zeile = 41 wieder in die erste Do-Schleife packen.

Viele Grüße,

Zwenn


  

Betrifft: AW: VBA - Überlauffehler nach "Aufräumaktion"
von: Christoph
Geschrieben am: 29.11.2018 12:26:52

Hey Zwenn, danke für deinen schnellen Kommentar!

Die Begrenzungen von Integer sind mir glücklicherweise bewusst. Ich verwende für größere Haufen "Long" und für Texte "String", was bisher immer irgendwie geklappt hat ^^.

Tatsächlich hat sich, nachdem ich die Initialisierung (wieder ein Wort gelernt) wieder in das Makro gepackt habe, alles wieder zum Besten eingestellt. Also danke für den Tipp!

Bisher macht VBA wirklich Spaß. Es gibt immer was neues zu lernen und auszuprobieren/optimieren.

LG Christoph