Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Laufzeitfehler 6 in einer Schleife

Laufzeitfehler 6 in einer Schleife
22.07.2019 13:28:54
Matze
Hallo zusammen,
ich bin relativer Anfänger in der VBA Programmierung.
Ich habe einen Kollegen der in Java ziemlich versiert ist, aber anhand der Syntax von VBA jetzt auch verzweifelt.
Ich habe Insgesamt 3 Dateien mit welchen ich arbeite.
1: "Basis", 2: "TE", 3: "RG"
Aus der 2. Datei wird vorher eine Pivot erstellt und gefiltert, in der für diesen Monat nötige HV-Nummern stehen. Diese werden kopiert in die Datei 3 eingefügt. Zum Abschluss soll aus Datei 1 (in welcher Vor- & Nachname stehen) die HV-Nr. abgeglichen werden und wenn diese Übereinstimmen, der Vor- und Nachname in Datei 3 übernommen werden.
Anhand des mit meinem Kollegen erstellten Code klappt es ansatzweise, er hat dann aber nach wenigen Datensätzen einen Laufzeitfehler und sagt er habe einen Überlauf.
Ich gehe davon aus, dass es ein Problem mit der HV-Nr. gibt, welche er nicht findet, aber in allen 3 Dateien ersichtlich ist.
Kann mir evtl. geholfen werden?

'5) Datenübernahme
Dim BasisQuelle As Workbook, TEQuelle As Workbook, RGQuelle As Workbook
Dim BasisSheet As Worksheet, TESheet As Worksheet, RGSheet As Worksheet
Set BasisQuelle = Workbooks("Basis.xlsx")
Set TEQuelle = Workbooks("SLSBasisTE.xls")
Set RGQuelle = Workbooks("Rechnungserstellung_SLS.xlsx")
Set BasisSheet = BasisQuelle.Sheets("Tabelle1")
Set TESheet = TEQuelle.Sheets("Tabelle2")
Set RGSheet = RGQuelle.Sheets("Anlage")
Dim TEBereich As Range, BasisBereich As Range, RGBereich As Range
Dim TERow As Long, BasisRow As Long, RGRow As Long
With BasisSheet
Set BasisBereich = .Range("B2:B" & .Cells(.Rows.Count, 2).End(xlUp).Row)
BasisRow = BasisBereich.Rows.Count
End With
With TESheet
Set TEBereich = .Range("A1:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
TERow = TEBereich.Rows.Count
End With
With RGSheet
Set RGBereich = .Range("A2:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
RGRow = RGBereich.Rows.Count
End With
Dim monat(12) As String
monat(0) = "Januar"
monat(1) = "Februar"
monat(2) = "März"
monat(3) = "April"
monat(4) = "Mai"
monat(5) = "Juni"
monat(6) = "Juli"
monat(7) = "August"
monat(8) = "September"
monat(9) = "Oktober"
monat(10) = "November"
monat(11) = "Dezember"
Dim index_basis As Integer, index_rg As Integer
index_basis = 1
index_rg = 1
Dim a As Integer 'TEBereich
For a = 4 To TESheet.Cells(Rows.Count, 1).End(xlUp).Row
Dim hv_nummer As String
Dim te_nummer As String
hv_nummer = TESheet.Cells(a, 1).Value
te_nummer = TESheet.Cells(a, 2).Value
Dim vorname As String, nachname As String, VertragsBeginn As String
Dim Kuendigung As String, KostenloserMonat As String, AbweichenderZahler As String
Dim SachKonto As String, KostenStelle As String, PreisDatensatz As String, Service As  _
String
Dim index_basis_finished As Boolean, index_rg_finished As Boolean
index_basis_finished = False
index_rg_finished = False
Do Until index_basis_finished And index_rg_finished
If Not index_basis_finished And BasisSheet.Cells(index_basis, 2).Value = hv_nummer  _
Then
index_basis_finished = True
End If
If Not index_rg_finished And RGSheet.Cells(index_rg, 1).Value = hv_nummer Then
' bezieht sich auf rg tabelle, schreibt datenfelder
index_rg_finished = True
End If
If index_basis_finished And index_rg_finished Then
nachname = BasisSheet.Cells(index_basis, 3).Value
vorname = BasisSheet.Cells(index_basis, 4).Value
Dim anzahl As Integer
Dim preis As Integer
' Einfügeposition ermittelt in der RG-Datei, daten werden eingefügt
RGSheet.Cells(index_rg, 2).Value = nachname
RGSheet.Cells(index_rg, 3).Value = vorname
'Errechnet den entsprechenden Preis
anzahl = RGSheet.Cells(index_rg, 9).Value
preis = RGSheet.Cells(index_rg, 13).Value
RGSheet.Cells(index_rg, 9).Value = te_nummer
RGSheet.Cells(index_rg, 14).Value = anzahl * preis
End If
' Abbruchbedingungen für Einzeldurchläufe und gesamten loop
If Not index_basis_finished Then
index_basis = index_basis + 1
ElseIf Not index_rg_finished Then
index_rg = index_rg + 1
End If
Loop
' Monats- und Jahresbeschreibung ermitteln und eintragen
Dim thisDate As Date
thisDate = Now
If (Month(thisDate) = 1) Then
RGSheet.Cells(index_rg, 12).Value = "Telefonie " & monat((12 + Month( _
thisDate) - 2) Mod 12) & " " & (Year(thisDate) - 1)
Else: RGSheet.Cells(index_rg, 12).Value = "Telefonie " & monat(Month(thisDate) - _
2) & " " & Year(thisDate)
End If
Next

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 6 in einer Schleife
22.07.2019 13:45:43
Daniel
Hi
der Laufzeitfehler 6 tritt auf, wenn bei der Deklaration einer Variablen einen zu kleinen Wertebereich gewählt hat.
dh wenn du deklarierst: dim x as Integer
dann ist die größtmögliche zuweisbare Zahl: 32767 (2^15-1)
können größere Zahlen vorkommen, muss man Long verwenden: dim x as Long
dann reicht der Zahlenraum bis 2^31-1
werden die Zahlen noch größer, dann Double.
aber du solltest mal die Zeile kennzeichnen, in welcher der Fehler auftritt und angeben, welche werte die verwendeten Variablen haben.
Gruß Daniel
Anzeige
AW: Laufzeitfehler 6 in einer Schleife
22.07.2019 14:17:13
Matze
Hallo Daniel,
vielen Dank für die Schnelle Antwort :-)
Du hast auf denke ich den richtigen Ansatz.
Die HV-Nr. können maximal 8-Stellig sein.
Wenn ich es als Integer deklariere

Dim index_basis As Integer, index_rg As Integer
index_basis = 1
index_rg = 1
kommt der Fehler in der Abbruchbedingung bei index_basis

' Abbruchbedingungen für Einzeldurchläufe und gesamten loop
If Not index_basis_finished Then
index_basis = index_basis + 1
ElseIf Not index_rg_finished Then
index_rg = index_rg + 1
End If
Loop
wenn ich es auf long oder double ändere kommt der Fehler in diesem Bereich if not...

Do Until index_basis_finished And index_rg_finished
If Not index_basis_finished And BasisSheet.Cells(index_basis, 2).Value = hv_nummer  _
Then
index_basis_finished = True
End If

Anzeige
AW: Laufzeitfehler 6 in einer Schleife
22.07.2019 14:28:07
Matze
Ergänzung:
wenn ich es auf long oder double ändere kommt der Fehler in diesem Bereich if not...
Laufzeitfehler '1004': Anwendungs- oder objektdefinierter Fehler

Do Until index_basis_finished And index_rg_finished
If Not index_basis_finished And BasisSheet.Cells(index_basis, 2).Value = hv_nummer   _
_
Then
index_basis_finished = True
End If

Anzeige
AW: Laufzeitfehler 6 in einer Schleife
22.07.2019 14:49:13
Matze
Hat sich erledigt.
Es hatte wirklich nur mit dem Integer zu tun.
Nach Rücksprache mit einem Kollegen, war eine Anweisung zu viel eingefügt, welche dafür gesorgt hatte, dass einige HV-Nr. nicht angezeigt wurden.
Nochmal ein großes Danke an Dich Daniel
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Laufzeitfehler 6 in einer Schleife beheben


Schritt-für-Schritt-Anleitung

  1. Variablen deklarieren: Stelle sicher, dass du die richtigen Datentypen verwendest. Wenn du große Zahlen erwartest, verwende Long anstelle von Integer. Zum Beispiel:

    Dim index_basis As Long, index_rg As Long
  2. Datenbereiche definieren: Achte darauf, dass die Berechnung der Datenbereiche korrekt erfolgt, um Laufzeitfehler zu vermeiden:

    Set BasisBereich = .Range("B2:B" & .Cells(.Rows.Count, 2).End(xlUp).Row)
  3. Fehlerursache identifizieren: Wenn der Laufzeitfehler 6 auftritt, überprüfe, in welcher Zeile der Fehler auftritt. Füge Debugging-Anweisungen hinzu, um die Werte der Variablen zu prüfen.

  4. Schleife anpassen: Achte darauf, dass die Schleife richtig konfiguriert ist und die Abbruchbedingungen korrekt formuliert sind:

    Do Until index_basis_finished And index_rg_finished
  5. Fehlerausgabe: Implementiere eine Fehlerbehandlung, um den genauen Fehler festzustellen. Nutze On Error-Anweisungen.


Häufige Fehler und Lösungen

  • Laufzeitfehler 6 überlauf: Tritt auf, wenn du eine Zahl in eine Variable speicherst, die den Wertebereich überschreitet. Stelle sicher, dass du Long oder Double verwendest.

  • Laufzeitfehler '1004': Dieser Fehler kann auftreten, wenn du auf ein nicht existierendes Objekt zugreifst. Überprüfe, ob die Arbeitsblätter und Zellen korrekt referenziert werden.

  • Fehler beim Einfügen von Daten: Wenn immer wieder Fehler beim Einfügen von Werten auftreten, überprüfe die Quelldaten auf Konsistenz und korrekte Formate.


Alternative Methoden

  • Verwendung von Collections oder Dictionaries: Anstatt Schleifen zu verwenden, kannst du Daten in einer Collection oder einem Dictionary speichern, um Abgleichoperationen effizienter zu gestalten.

  • Excel-Formeln nutzen: In einigen Fällen können Excel-Formeln wie SVERWEIS oder INDEX/VERGLEICH als Alternative zur VBA-Lösung verwendet werden, um Daten zwischen Dateien abzugleichen.


Praktische Beispiele

Hier ist ein Beispiel, wie du den Fehler in einem einfachen VBA-Skript vermeiden kannst:

Dim index_basis As Long
index_basis = 1
Do While index_basis <= 100 ' Beispiel für eine maximale Zeile
    ' Deine Logik hier
    index_basis = index_basis + 1
Loop

Achte darauf, dass du die Grenzen deiner Schleifen und die Datentypen entsprechend den erwarteten Werten anpasst.


Tipps für Profis

  • Debugging Tools: Nutze die Debugging-Funktion in der VBA-Entwicklungsumgebung, um den Code schrittweise zu durchlaufen und Variablenwerte zu überwachen.

  • Modularer Code: Teile deinen Code in kleinere, wiederverwendbare Funktionen auf. Das vereinfacht das Debugging und die Wartung.

  • Fehlerbehandlung implementieren: Setze On Error Resume Next oder On Error GoTo ein, um spezifische Fehler zu behandeln und die Ausführung des Codes nicht zu stoppen.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Integer und Long?
Integer kann Werte von -32.768 bis 32.767 speichern, während Long einen Bereich von -2.147.483.648 bis 2.147.483.647 hat. Für größere Zahlen solltest du Long verwenden.

2. Wie kann ich Laufzeitfehler 6 überlauf beheben?
Überprüfe, ob du den richtigen Datentyp für deine Variablen gewählt hast, und stelle sicher, dass die Werte innerhalb des erlaubten Bereichs liegen. Verwende Long anstelle von Integer, wenn große Werte möglich sind.

3. Tritt der Laufzeitfehler auch auf Mac auf?
Ja, der visual basic for applications laufzeitfehler 6 mac kann auch auf Mac-Systemen auftreten, wenn die gleichen Bedingungen erfüllt sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige