Makro stürzt ab
25.05.2020 19:25:07
Archeangelos
Ich hab im Rahmen meiner Bachelorthesis ein relativ aufwändiges Makro geschrieben.
Das Makro ist mit einer For-Schleife in 3 Teile aufgeteilt ( Eintragung in Spalte A,B,C)..
Das Makro läuft wenn ich es in Teilen (for k = 1 to 2 , oder k = 2 to 3) teste ohne Probleme. Wenn ich aber das gesamte Programm (k = 1 to 3) starte stürzt es nach einer gewissen zeit ab.
Im Anhang ist der Quellcode in dem das Makro abstürzt, wo es genau abstürzt kann ich nicht sagen.
Ich kann leider keine testmappe oder ein testfile hochladen das ich es nicht reprodiziert bekomme.
Ich hoffe ihr könnt beim durschauen des codes ein paar fehlermöglichkeiten aufzählen, ich hab langsam keine ideen mehr.
Das Makro wird durch ein anderes Makro aufgerufen welches vorher die Events, screenupdate und autosave ausschaltet und danach wieder einschaltet:
With Application
.EnableEvents = False
.Calculation = xlCalculationManual
.ScreenUpdating = False
ActiveWorkbook.AutoSaveOn = False
End With
Vielen dank im Vorraus,
Grüße Archeangelos
Quellcode:
Sub QEV_Nummern_eintragen()
If Not ThisWorkbook.Name = "Datenbank_V_016.xlsm" Then
Workbooks("Datenbank_V_016.xlsm").Activate
End If
Dim wks_db As Worksheet
Set wks_db = ThisWorkbook.Sheets("Datenbank_HSN")
Dim wks_dbi As Worksheet
Set wks_dbi = ThisWorkbook.Sheets("QEV_Import")
'Home PC
Workbooks.Open Filename:="dateipfad"
Dim wks_mdb As Worksheet
Set wks_mdb = Workbooks("WERKSTOFFLISTE_2020-04.xlsx").Sheets("CAD-Werkstoffliste 2020-03") _
_
_
Dim k As Integer
For k = 1 To 3
If wks_db.FilterMode Then wks_db.ShowAllData
If k = 1 Then
Materialspalte_DB = 1
QEV_Spalte_DB = 2
wks_db.Activate
Datenbank_Count = WorksheetFunction.CountA(Range("A:A")) - 2
ElseIf k = 2 Then
Materialspalte_DB = 6
QEV_Spalte_DB = 7
wks_db.Activate
Datenbank_Count = WorksheetFunction.CountA(Range("F:F")) - 2
ElseIf k = 3 Then
Materialspalte_DB = 11
QEV_Spalte_DB = 12
wks_db.Activate
Datenbank_Count = WorksheetFunction.CountA(Range("A:A")) - 2
End If
For i = 1 To Datenbank_Count + 1
If Not wks_db.Cells(i + 1, Materialspalte_DB).Value = "" Then
suchbegriff_leer = wks_db.Cells(i + 1, Materialspalte_DB).Value & " *"
suchbegriff_bind = wks_db.Cells(i + 1, Materialspalte_DB).Value & "-*"
If InStr(1, suchbegriff_leer, "DBL") = 1 Then
suchbegriff_leer = "*" & wks_db.Cells(i + 1, Materialspalte_DB).Value
suchbegriff_bind = "*" & wks_db.Cells(i + 1, Materialspalte_DB).Value & "*"
wks_mdb.Range("$A$4:$S$5609").AutoFilter Field:=10, Criteria1:= _
suchbegriff_leer, Operator:=xlOr, Criteria2:=suchbegriff_bind
Else
wks_mdb.Range("$A$4:$S$5609").AutoFilter Field:=8, Criteria1:= _
suchbegriff_leer, Operator:=xlOr, Criteria2:=suchbegriff_bind
End If
wks_mdb.Activate
If wks_mdb.Range("B1:B" & Cells(Rows.Count, 2).End(xlUp).Row).SpecialCells( _
xlCellTypeVisible).Count > 3 Then
wks_mdb.Range("B5:B" & wks_mdb.UsedRange.Rows.Count).SpecialCells( _
xlCellTypeVisible).Copy
wks_dbi.Activate
wks_dbi.Cells(1, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End If
QEV_count = WorksheetFunction.CountA(Range("A:A"))
If QEV_count 1000 Then
suchbegriff_leer = wks_db.Cells(i + 1, Materialspalte_DB).Value
wks_dbi.Activate
wks_dbi.Range(Cells(1, 1), Cells(Columns.Count, 112)).ClearContents
If wks_mdb.FilterMode Then wks_mdb.ShowAllData
wks_mdb.Range("$A$4:$S$5609").AutoFilter Field:=8, Criteria1:= _
suchbegriff_leer, Operator:=xlAnd
wks_mdb.Activate
If wks_mdb.Range("B1:B" & Cells(Rows.Count, 2).End(xlUp).Row).SpecialCells( _
_
_
xlCellTypeVisible).Count > 3 Then
wks_mdb.Range("B5:B" & wks_mdb.UsedRange.Rows.Count).SpecialCells( _
xlCellTypeVisible).Copy
wks_dbi.Activate
wks_dbi.Cells(1, 1).PasteSpecial Paste:=xlPasteValues, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
End If
QEV_count = WorksheetFunction.CountA(Range("A:A"))
End If
If Not QEV_count > 1000 Or QEV_count