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

Sortieren mit array crasht Excel

Sortieren mit array crasht Excel
22.12.2020 10:40:45
Martin
Ich suche schon seit geraumer Zeit nach der Ursache, weshalb es beim Abspeichern einer Excel-Datei immer wieder zu "Excel funktioniert nicht mehr" kommt. Das Problem tritt kurioserweise nur auf, wenn ich die Datei als xlsm oder xlsb abspeichere. Bei Speicherung im xls-Format kommen zwar Kompatibilitätswarnungen, aber im Kompatibilitätsmodus läuft die Datei dann problemlos unter Excel 2010.
Nachdem ich das nun genauer untersucht habe und durch zahlreiche Tests eingegrenzt habe, kommt heraus, dass die Anwendung dieses Makros kurz vor dem Abspeichern den Crash auslöst. Das Makro selbst läuft fehlerfrei durch und funktioniert auch wie erwartet:

Public Sub Gesamtbestand_sortieren()
Dim arrS, lngNr
arrS = Array("Zugang", "Zugang (Ersatzkarte)", "Zugang w/Namensänderung", "Zugang w/Ä _
nderung Geltungsbereich", "Pausierung Ende", _
"Abgang", "Abgang w/Verlust", "Abgang w/Namensänderung", "Abgang w/Änderung  _
Geltungsbereich", "Fahrpreisänderung (w/Azubi-Konditionen)", "Karte vernichtet", "Pausierung  _
Beginn")
Application.AddCustomList ListArray:=arrS
lngNr = Application.GetCustomListNum(arrS)
Range("Gesamt3").Sort Key1:=Range("E7"), Order1:=xlAscending, Key2:=Range("C7") _
, Order2:=xlAscending, Key3:=Range("J7"), Order3:=xlAscending, _
Header:=xlGuess, OrderCustom:=lngNr + 1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
Application.DeleteCustomList ListNum:=lngNr
End Sub
Fehlt da noch irgendwas, um Speicher freizugeben o.ä.?

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sortieren mit array crasht Excel
22.12.2020 13:05:09
Yal
Hallo Martin,
das heisst, das Makro selbst verursacht den Crash nicht, sondern es bricht, wenn Du speichern möchtest?
Ist Excel gerade in manuelle Berechnung inkl. "Vor dem Speichern die Arbeitsmappe neu berechnen"? letzteres könntest Du ausschalten (Optionen, Formeln) und nochmal versuchen.
Gibt es Ereignisprocedure, die mit der Sortierung verknüpft sind?
Nur Vermutungen, aber keine richtige Ahnung. Ich lasse es offen.
VG
Yal
AW: Sortieren mit array crasht Excel
22.12.2020 15:40:09
fcs
Hallo Martin,
probiere es mal mit den folgenden Anpassungen.
Der Ablauf sollte dann mit einer Meldung stoppen.
Wenn es funktioniert, dann probiere es mal ohne die MsgBox.
LG
Franz
Public Sub Gesamtbestand_sortieren()
Dim arrS, lngNr
Dim StatusCalc As Long
'Makroberemsen lösen
With Application
StatusCalc = .Calculation
.Calculation = xlCalculationAutomatic
.ScreenUpdating = False
.EnableEvents = False
End With
arrS = Array("Zugang", "Zugang (Ersatzkarte)", "Zugang w/Namensänderung", _
"Zugang w/Änderung Geltungsbereich", "Pausierung Ende", "Abgang", _
"Abgang w/Verlust", "Abgang w/Namensänderung", "Abgang w/Änderung Geltungsbereich", _
"Fahrpreisänderung (w/Azubi-Konditionen)", "Karte vernichtet", "Pausierung Beginn")
Application.AddCustomList ListArray:=arrS
lngNr = Application.GetCustomListNum(arrS)
Range("Gesamt3").Sort Key1:=Range("E7"), Order1:=xlAscending, Key2:=Range("C7") _
, Order2:=xlAscending, Key3:=Range("J7"), Order3:=xlAscending, _
Header:=xlGuess, OrderCustom:=lngNr + 1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
Application.DeleteCustomList ListNum:=lngNr
'Makroberemsen zurücksetzen
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = StatusCalc
.Calculate
End With
MsgBox "Sortieren fertig", vbInformation + vbOKOnly, "Test Makro: Gesamtbestand_sortieren"
End Sub

Anzeige
Korrektur: Sortieren mit array crasht Excel
22.12.2020 15:43:42
fcs
Hallo Martin,
da war noch ein Fehler drin.
LG
Franz
Public Sub Gesamtbestand_sortieren()
Dim arrS, lngNr
Dim StatusCalc As Long
'Makroberemsen lösen
With Application
StatusCalc = .Calculation           'Berechnungsmodus merken
.Calculation = xlCalculationManual  'Berechnung auf manuell setzen
.ScreenUpdating = False
.EnableEvents = False
End With
arrS = Array("Zugang", "Zugang (Ersatzkarte)", "Zugang w/Namensänderung", _
"Zugang w/Änderung Geltungsbereich", "Pausierung Ende", "Abgang", _
"Abgang w/Verlust", "Abgang w/Namensänderung", "Abgang w/Änderung Geltungsbereich", _
"Fahrpreisänderung (w/Azubi-Konditionen)", "Karte vernichtet", "Pausierung Beginn")
Application.AddCustomList ListArray:=arrS
lngNr = Application.GetCustomListNum(arrS)
Range("Gesamt3").Sort Key1:=Range("E7"), Order1:=xlAscending, Key2:=Range("C7") _
, Order2:=xlAscending, Key3:=Range("J7"), Order3:=xlAscending, _
Header:=xlGuess, OrderCustom:=lngNr + 1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
Application.DeleteCustomList ListNum:=lngNr
'Makroberemsen zurücksetzen
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = StatusCalc
.Calculate
End With
MsgBox "Sortieren fertig", vbInformation + vbOKOnly, "Test Makro: Gesamtbestand_sortieren"
End Sub

Anzeige
AW: Korrektur: Sortieren mit array crasht Excel
23.12.2020 11:23:19
Martin
Hallo Franz,
vielen Dank für den Code. Leider crasht es auch damit. Das Sortieren wird zunächst fehlerfrei durchgeführt. Selbst wenn ich danach mehrere Minuten warte, kommt beim anschließenden Speichern sofort "Excel funktioniert nicht mehr".
In dem sortierten Tabellenblatt (der Range "Gesamt3") gibt es keinerlei Formeln. Allerdings gibt es in einem anderen Tabellenblatt mehr als 1000 Zeilen, die eine SVERWEIS-Formel haben, die auf einen Teilbereich der Range Bezug nehmen. Und es gibt ein weiteres Tabellenblatt, das etliche DBVERWEIS-Formeln enthält, die sich auf den sortierten Range beziehen. Aber das sollte zum Zeitpunkt des Speicherns eigentlich längst alles aktualisiert sein.
Sicherheitshalber habe ich mal getestet, die beiden Blätter zu löschen. Aber auch dann crasht es noch.
Und auch wenn ich in den Excel-Optionen die Arbeitsmappenberechnung von automatisch auf manuell stelle, ändert sich nichts.
Zu der Frage von Yal ("Gibt es Ereignisprocedure, die mit der Sortierung verknüpft sind?"):
Es gibt in dem Tabellenblatt, auf das sich die Range "Gesamt3" bezieht, das Worksheet_Change - Makro, aber selbst wenn ich das rausnehme, crasht es.
Es gibt auch kein Workbook. BeforeSave-Ereignis.
Ich habe noch etwas weiter geforscht, und bislang crasht es nicht mehr, wenn ich vor dem Löschen der Liste die Sortierfelder zurücksetze:
ActiveSheet.Sort.SortFields.Clear
Application.DeleteCustomList ListNum:=lngNr
Ich beobachte das nochmal, ehe ich den Thread auf gelöst setze.
Anzeige
AW: Korrektur: Sortieren mit array crasht Excel
23.12.2020 11:44:57
fcs
Hallo Martin,
Es gibt auch kein Workbook. BeforeSave-Ereignis.
Ich habe noch etwas weiter geforscht, und bislang crasht es nicht mehr, wenn ich vor dem Löschen der Liste die Sortierfelder zurücksetze:
ActiveSheet.Sort.SortFields.Clear
Application.DeleteCustomList ListNum:=lngNr

Das war eine gute Idee, denn Excel merkt sich die letzten Sortiereinstellungen, für jedes Tabellenblatt und deinem Fall löscht du ja einen Teil der Sortiervorgaben. Das hat Excel dann wohl nicht gefallen und ist beleidigt abgeschmiert.
LG und Frohes Fest
Franz

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige