Laufzeitfehler 6 in einer Schleife
22.07.2019 13:28:54
Matze
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