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

Fehlermeldung Überlauf

Fehlermeldung Überlauf
26.05.2020 07:53:12
Peter
Guten Morgen,
ich habe nachstehendes Makro bei dem es zum Laufzeitfehler 6 Überlauf kommt. Die Ursache hierfür kann ich leider nicht finden. Deshalb benötige ich eure Hilfe.

Option Explicit
Sub Suchen()
Dim wb As Workbook
Dim wksH As Worksheet
Dim wksTB4 As Worksheet
Dim Startdatum As Date, EndDatum As Date
Dim wksWd As Worksheet
Dim Such1_lfd As Object         'benötigt für 1. Konto
Dim rng1_lfd As Range           'benötigt für 1. Konto
Dim KontoNrWert1_lfd As Object  'benötigt für 1. Konto
Dim KontoAnfDat1_lfd As Object  'benötigt für 1. Konto
Dim KontoEndDat1_lfd As Object  'benötigt für 1. Konto
Dim KontoArtWert1_lfd As Object 'benötigt für 1. Konto
Dim Such2_lfd As Object         'benötigt für 2. Konto
Dim rng2_lfd As Range           'benötigt für 2. Konto
Dim KontoNrWert2_lfd As Object  'benötigt für 2. Konto
Dim KontoAnfDat2_lfd As Object  'benötigt für 2. Konto
Dim KontoEndDat2_lfd As Object  'benötigt für 2. Konto
Dim KontoArtWert2_lfd As Object 'benötigt für 2. Konto
Dim Such3_lfd As Object         'benötigt für 3. Konto
Dim rng3_lfd As Range           'benötigt für 3. Konto
Dim KontoNrWert3_lfd As Object  'benötigt für 3. Konto
Dim KontoAnfDat3_lfd As Object  'benötigt für 3. Konto
Dim KontoEndDat3_lfd As Object  'benötigt für 3. Konto
Dim KontoArtWert3_lfd As Object 'benötigt für 3. Konto
Set wb = ThisWorkbook
Set wksH = wb.Worksheets("Hilfstabelle")
Set wksTB4 = wb.Worksheets("Kontodaten")
Set wksWd = wb.Worksheets("Worddaten")
''    TextBox1 = ""
''    TextBox2 = ""
''    If Worksheets("Hilfstabelle").Range("C3") > "" Then 'Kalenderjahr
''        With Worksheets("Hilfstabelle_SchulKalenderjahr")
''                If Me.ListBox1 > "" Then
''                    TextBox1.Value = .Cells(ListBox1.ListIndex + 18, 5)
''                    TextBox2.Value = .Cells(ListBox1.ListIndex + 18, 6)
''                End If
''        End With
''    ElseIf Worksheets("Hilfstabelle").Range("C2") > "" Then 'Schuljahr
''        With Worksheets("Hilfstabelle_SchulKalenderjahr")
''                If Me.ListBox1 > "" Then
''                    TextBox1.Value = .Cells(ListBox1.ListIndex + 18, 8)
''                    TextBox2.Value = .Cells(ListBox1.ListIndex + 18, 9)
''                End If
''        End With
''    End If
''    'Anfang Zellen D18 - D23 in Worddaten mit ">" füllen
''        Worksheets("Worddaten").Range("D19").Value = ">"
''        Worksheets("Worddaten").Range("D21").Value = ">"
''        Worksheets("Worddaten").Range("D23").Value = ">"
''        Worksheets("Worddaten").Range("D25").Value = ">"
''        Worksheets("Worddaten").Range("D27").Value = ">"
''        Worksheets("Worddaten").Range("D29").Value = ">"
''    'Ende Zellen D18 - D23 in Worddaten mit ">" füllen
''    'Anfang Prüfung, ob Datum in Listbox1 gewählt wurde
''    If TextBox1 = "" And TextBox2 = "" Then
''        Label18.Caption = "Bitte in Listbox Datumwert auswählen!"
''        Exit Sub
''    Else
''        Startdatum = CDate(Me.TextBox1)
''        EndDatum = CDate(Me.TextBox2)     'wird nur hier benötigt
''        Label18.Caption = ""
''    End If
''    'Ende Prüfung, ob Datum in Listbox1 gewählt wurde
Startdatum = CDate("01.01.2019")
'EndDatum = CDate("31.12.2100")      'wird nicht benötigt
wksTB4.Activate
Set Such1_lfd = wksH.Range("A2")
Set Such2_lfd = wksH.Range("A3")
Set Such3_lfd = wksH.Range("A4")
'Anfang Konto1 laufend und beendet
'funktioniert
'Anfang sucht 1. Konto laufend, wenn Anfangdatum grösser oder gleich Startdatum
For Each rng1_lfd In wksTB4.Range("B2:B" & Range("B65536").End(xlUp).Row)
If wksTB4.Cells(rng1_lfd.Row, 2) = Such1_lfd And _
wksTB4.Cells(rng1_lfd.Row, 8) >= (Startdatum) And _
wksTB4.Cells(rng1_lfd.Row, 9) = "" Then
If rng1_lfd = Such1_lfd Then
'                MsgBox Sheets("Kontodaten").Cells(rng1_lfd.Row, 6)
'                MsgBox Sheets("Kontodaten").Cells(rng1_lfd.Row, 8)
'                MsgBox Sheets("Kontodaten").Cells(rng1_lfd.Row, 9)
Set KontoNrWert1_lfd = Sheets("Kontodaten").Cells(rng1_lfd.Row, 6)
Set KontoAnfDat1_lfd = Sheets("Kontodaten").Cells(rng1_lfd.Row, 8)
Set KontoEndDat1_lfd = Sheets("Kontodaten").Cells(rng1_lfd.Row, 9)
If KontoNrWert1_lfd And KontoAnfDat1_lfd >= Startdatum Then
If KontoNrWert1_lfd And KontoEndDat1_lfd = "" Then
If KontoEndDat1_lfd = "" Then
MsgBox "Konto1 laufend" & " " & KontoNrWert1_lfd
Worksheets("Worddaten").Range("D19").Value = KontoNrWert1_lfd
End If
End If
End If
End If
End If
Next rng1_lfd
'Ende sucht 1. Konto laufend, wenn Anfangdatum grösser oder gleich Startdatum
'funktioniert
'Anfang sucht 1. Konto laufend, wenn Anfangdatum kleiner Startdatum
For Each rng1_lfd In wksTB4.Range("B2:B" & Range("B65536").End(xlUp).Row)
If wksTB4.Cells(rng1_lfd.Row, 2) = Such1_lfd And _
wksTB4.Cells(rng1_lfd.Row, 8) = CDate("01.01. _
2019") And KontoEndDat1_lfd > "" Then
'''                        MsgBox "innerhalb" & " " & rng1_lfd & " " & KontoNrWert1_lfd
'''                    End If
If Such1_lfd = KontoArtWert1_lfd And KontoAnfDat1_lfd >= Startdatum And  _
KontoEndDat1_lfd > "" Then
MsgBox "Konto1 beendet" & " " & rng1_lfd & " " & KontoNrWert1_lfd
Worksheets("Worddaten").Range("D25").Value = KontoNrWert1_lfd
End If
End If
Next rng1_lfd
'Ende sucht 1. Konto beendet grösser/gleich Anfangdatum
'Ende Konto1 laufend und beendet
Set KontoNrWert1_lfd = Nothing 'Sheets("Kontodaten").Cells(rng1_lfd.Row, 6)
Set KontoAnfDat1_lfd = Nothing 'Sheets("Kontodaten").Cells(rng1_lfd.Row, 8)
Set KontoEndDat1_lfd = Nothing 'Sheets("Kontodaten").Cells(rng1_lfd.Row, 9)
'Anfang Konto2 laufend und beendet
'funktioniert
'Anfang sucht 2. Konto laufend, wenn Anfangdatum grösser oder gleich Startdatum
For Each rng2_lfd In wksTB4.Range("B2:B" & Range("B65536").End(xlUp).Row)
If wksTB4.Cells(rng2_lfd.Row, 2) = Such2_lfd And _
wksTB4.Cells(rng2_lfd.Row, 8) >= (Startdatum) And _
wksTB4.Cells(rng2_lfd.Row, 9) = "" Then
If rng2_lfd = Such2_lfd Then
'                MsgBox Sheets("Kontodaten").Cells(rng2_lfd.Row, 6)
'                MsgBox Sheets("Kontodaten").Cells(rng2_lfd.Row, 8)
'                MsgBox Sheets("Kontodaten").Cells(rng2_lfd.Row, 9)
Set KontoNrWert2_lfd = Sheets("Kontodaten").Cells(rng2_lfd.Row, 6)
Set KontoAnfDat2_lfd = Sheets("Kontodaten").Cells(rng2_lfd.Row, 8)
Set KontoEndDat2_lfd = Sheets("Kontodaten").Cells(rng2_lfd.Row, 9)
If KontoNrWert2_lfd And KontoAnfDat2_lfd >= Startdatum Then     *hier Ü _
berlauf
If KontoNrWert2_lfd And KontoEndDat2_lfd = "" Then
If KontoEndDat2_lfd = "" Then
MsgBox "Konto2 laufend" & " " & KontoNrWert2_lfd
Worksheets("Worddaten").Range("D21").Value = KontoNrWert2_lfd
End If
End If
End If
End If
End If
Next rng2_lfd
'Ende sucht 1. Konto laufend, wenn Anfangdatum grösser oder gleich Startdatum
'funktioniert
'Anfang sucht 2. Konto laufend, wenn Anfangdatum kleiner Startdatum
For Each rng2_lfd In wksTB4.Range("B2:B" & Range("B65536").End(xlUp).Row)
If wksTB4.Cells(rng2_lfd.Row, 2) = Such2_lfd And _
wksTB4.Cells(rng2_lfd.Row, 8) = CDate("01.01. _
2019") And KontoEndDat2_lfd > "" Then
'''                        MsgBox "innerhalb" & " " & rng2_lfd & " " & KontoNrWert2_lfd
'''                    End If
If Such2_lfd = KontoArtWert2_lfd And KontoAnfDat2_lfd >= Startdatum And  _
KontoEndDat2_lfd > "" Then
MsgBox "Konto2 beendet" & " " & rng2_lfd & " " & KontoNrWert2_lfd
Worksheets("Worddaten").Range("D27").Value = KontoNrWert2_lfd
End If
End If
Next rng2_lfd
'Ende sucht 2. Konto beendet grösser/gleich Anfangdatum
'Ende Konto2 laufend und beendet
'Anfang Konto3 laufend und beendet
'funktioniert
'Anfang sucht 3. Konto laufend, wenn Anfangdatum grösser oder gleich Startdatum
For Each rng3_lfd In wksTB4.Range("B2:B" & Range("B65536").End(xlUp).Row)
If wksTB4.Cells(rng3_lfd.Row, 2) = Such3_lfd And _
wksTB4.Cells(rng3_lfd.Row, 8) >= (Startdatum) And _
wksTB4.Cells(rng3_lfd.Row, 9) = "" Then
If rng3_lfd = Such3_lfd Then
'                MsgBox Sheets("Kontodaten").Cells(rng3_lfd.Row, 6)
'                MsgBox Sheets("Kontodaten").Cells(rng3_lfd.Row, 8)
'                MsgBox Sheets("Kontodaten").Cells(rng3_lfd.Row, 9)
Set KontoNrWert3_lfd = Sheets("Kontodaten").Cells(rng3_lfd.Row, 6)
Set KontoAnfDat3_lfd = Sheets("Kontodaten").Cells(rng3_lfd.Row, 8)
Set KontoEndDat3_lfd = Sheets("Kontodaten").Cells(rng3_lfd.Row, 9)
If KontoNrWert3_lfd And KontoAnfDat3_lfd >= Startdatum Then
If KontoNrWert3_lfd And KontoEndDat3_lfd = "" Then
If KontoEndDat3_lfd = "" Then
MsgBox "Konto3 laufend" & " " & KontoNrWert3_lfd
Worksheets("Worddaten").Range("D23").Value = KontoNrWert3_lfd
End If
End If
End If
End If
End If
Next rng3_lfd
'Ende sucht 1. Konto laufend, wenn Anfangdatum grösser oder gleich Startdatum
'funktioniert
'Anfang sucht 3. Konto laufend, wenn Anfangdatum kleiner Startdatum
For Each rng3_lfd In wksTB4.Range("B2:B" & Range("B65536").End(xlUp).Row)
If wksTB4.Cells(rng3_lfd.Row, 2) = Such3_lfd And _
wksTB4.Cells(rng3_lfd.Row, 8) = Startdatum And  _
KontoEndDat3_lfd > "" Then
'MsgBox "Konto3 beendet" & " " & rng31_lfd & " " & KontoNrWert3_lfd
Worksheets("Worddaten").Range("D29").Value = KontoNrWert3_lfd
End If
End If
Next rng3_lfd
'Ende sucht 3. Konto beendet grösser/gleich Anfangdatum
'Ende Konto3 laufend und beendet
Worksheets("Worddaten").Activate
'Anfang Prüfung, ob die Zellen D18 - D23 in Worddaten leer sind
If Worksheets("Worddaten").Range("D19").Value = "" Then
Worksheets("Worddaten").Range("D19").Value = ">"
End If
If Worksheets("Worddaten").Range("D21").Value = "" Then
Worksheets("Worddaten").Range("D21").Value = ">"
End If
If Worksheets("Worddaten").Range("D23").Value = "" Then
Worksheets("Worddaten").Range("D23").Value = ">"
End If
If Worksheets("Worddaten").Range("D25").Value = "" Then
Worksheets("Worddaten").Range("D25").Value = ">"
End If
If Worksheets("Worddaten").Range("D27").Value = "" Then
Worksheets("Worddaten").Range("D27").Value = ">"
End If
If Worksheets("Worddaten").Range("D29").Value = "" Then
Worksheets("Worddaten").Range("D29").Value = ">"
End If
'Ende Prüfung, ob die Zellen D18 - D23 in Worddaten leer sind
End Sub
In dieser Zeile "If KontoNrWert2_lfd And KontoAnfDat2_lfd >= Startdatum Then" erfolgt der Überlauf, ebenso in der Zeile "If KontoNrWert3_lfd And KontoAnfDat3_lfd >= Startdatum Then".
Könnt ihr mir bitte helfen und sagen warum hier ein Überlauf erfolgt.
Gruss
Peter

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehlermeldung Überlauf
26.05.2020 08:42:43
Regina
Hallo Peter,
ohne Datei ein Stochern im Nebel, ab eine Idee:
Du möchtest 2 Variablen mit einem datum vergleichen. Das geht so:
If KontoNrWert2_lfd >= Startdatum And KontoAnfDat2_lfd >= Startdatum Then
Vergleiche von Datumswerten sind manchmal tricky, teste sonst auch mal so:
If Cdate(KontoNrWert2_lfd) >= Startdatum And CDate(KontoAnfDat2_lfd) >= Startdatum Then
Enthalten die beien Konto... wirklich gültige Daten?
Gruß Regina
AW: Fehlermeldung Überlauf gelöst
26.05.2020 09:27:39
Peter
Hallo Regina,
besten Dank für Deine Hilfe.
Der Fehler für den Überlauf liegt in dem Wert "KontoNrWert2_lfd". Dieser Wert ist kein Datum sondern eine Kontonummer, die hier jedoch nicht relevant ist.
Die richtige Lösung ist:

If KontoAnfDat2_lfd 

Wünsche Dir noch einen schönen Tag.
Gruss
Peter
Anzeige
AW: Fehlermeldung Überlauf gelöst
26.05.2020 10:39:14
Luschi
Hallo Peter,
warum definierst Du Variablen als Objekt um sie dann einem Range zuzuordnen:
Dim KontoEndDat2_lfd As Object
Set KontoEndDat2_lfd = Sheets("Kontodaten").Cells(rng2_lfd.Row, 9)
um dann auf die Value-Property des Objektes zuzugreifen:
If KontoEndDat2_lfd = "" Then
In VB.NET/C# nennt man dies: implizietes Boxing/Unboxing und dieses Verhalten kostest viel Rechenzeit.
Außerdem muß man beim Korrekturlesen ständig auf der Hut sein, ob auch das richtige Property gemeint ist, wenn der Vba-Ersteller keine Lust hat, die Eigenschaft auch zu benennen, die gemeint ist; hier:
If KontoAnfDat2_lfd < Startdatum Then
ist 'KontoAnfDat2_lfd' nach wie vor ein Object vom Typ Range und Du zwingst den Vba-Interpreter, die Standard-Eigenschaft zur Laufzeit selbst einzusetzen (und das auch noch in einer Schleife).
Ich hatte jahrelang einen Kontroll-Coder vor der Nase (mit einem Hang für die ungarische Notation) und da gewöhnt man sich solche Nachlässigkeiten ganz schnell ab.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Fehlermeldung Überlauf gelöst
26.05.2020 11:10:00
Peter
Hallo Luschi,
vielen Dank für Deinen hilfreichen Rat. Ich habe den Code entsprechend umgebaut.
Wünsche Dir noch einen schönen Tag.
Gruss
Peter

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige