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

Excelabsturz

Excelabsturz
14.07.2017 10:37:36
Jan
Hallo liebe VBA Gemeinde,
nutze schon einige Zeit dieses fachkundige Forum. Dies ist nun mein erster Beitrag, da ich dazu leider nichts in der Historie gefunden habe.
Ich habe ein Makro, welches beim Generieren Daten aus einer anderen (Quell)Datei überträgt, diese weiter verarbeitet und anschliessend die (Quell)Datei schliesst. Letzteres verursacht Probleme. Das Makro läuft immer einmal (selten zwei oder drei mal) sauber durch, beim nächsten Mal stürzt Excel ab. Dies passiert immer beim Schliessen der Quelldatei. Soweit ich den Ausnahmecode c0000005 (Ausnahmeoffset: 00152a9b) verstehe handelt es sich um eine Zugriffsverletzung.
Habe dies im schrittweisen Debugvorgang auch manuell (Schliessen per Mausklick) versucht. Identisches Verhalten, sobald ich schliesse Absturz. Habe versucht, durch "DoEvents" und/oder das Platzieren des Schliessvorgangs an verschiedenen Stellen eine potentielle zeitliche Überschneidung zu vermeiden. Alternativ zudem die Datei (Modul) nicht im Rahmen des Makros geschlossen - auch dies hat nichts genützt, da beim anschliessenden manuellen Schliessen Excel wieder abstürzte (siehe oben).
Bin mit meinem Latein am Ende und hoffe hier mit Euch eine Lösung zu finden.
Im Folgenden der Code komplett, obwohl ich glaube, dass es sich allein auf den markierten Schliessvorgang bezieht.
Jan
  • 
    Sub Kontennachweis()
    Dim Jahr As Integer
    Start = Timer
    Application.ScreenUpdating = False
    Application.AskToUpdateLinks = False
    Application.DisplayAlerts = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    '  Jahr = InputBox("Welches Jahr möchten Sie abgleichen?", "Frage", Year(Date))
    Trennzeichen = Application.PathSeparator 'betriebssystemspezifisches Trennzeichen  _
    Inputdatenpfad
    Mandant = ThisWorkbook.Worksheets("Master").Range("D5").Offset(0, 0).Value
    Berater = ThisWorkbook.Worksheets("Master").Range("D6").Offset(0, 0).Value
    Modulpfad = "D:\Kundenmanagement\Einzelkunden\" & Berater & "-" & Mandant &  _
    Trennzeichen
    Modul = "Modul_" & Mandant & ".xlsb"
    Jahr = Year(GetValue(Modulpfad, Modul, "Cockpit", "C4"))
    Jahresordner = Jahr & ThisWorkbook.Sheets("Blatt2").Range("O18").Value
    Pfad_Input = "D:\Dateninput\" & Berater & Trennzeichen & Mandant & Trennzeichen &  _
    Jahresordner & Trennzeichen
    Konten = "Kontennachweis.csv"
    Ident = ThisWorkbook.Sheets("Blatt2").Range("L26").Value 'Kontengruppe Kasse für  _
    Identifikation Anzahl Kontenstellen
    On Error Resume Next
    If Workbooks(Konten) Is Nothing Then Workbooks.Open Filename:=Pfad_Input & Konten, local:= _
    True
    On Error GoTo 0
    '  Workbooks(Konten).Activate
    'Spalte A aufsteigend sortieren (zuerst 1 -> Handelsbilanz)
    ActiveSheet.Sort.SortFields.Clear
    ActiveSheet.Sort.SortFields.Add Key:=Range("A1:A284"), SortOn:=xlSortOnValues, Order:= _
    xlAscending
    With ActiveSheet.Sort
    .SetRange Range("A1:P284")
    .Apply
    End With
    'Einträge Steuerbilanz (Zeilen mit Merkmal 2) löschen
    Startzelle = "A1"
    For i = 0 To 1000
    If Range(Startzelle).Offset(i, 0) = "" Then Exit For
    If Range(Startzelle).Offset(i, 0).Value = 2 Then Range(Startzelle).Offset(i, 0).EntireRow. _
    Delete: i = i - 1
    Next i
    '  Workbooks(Konten).Activate
    'Konten aufsteigend sortieren (um Dupletten zu entfernen)
    Rows("1:1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("A1:P1").AutoFilter
    ActiveSheet.AutoFilter.Sort.SortFields.Add Key:=Range("L1:L1000"), SortOn:=xlSortOnValues,  _
    Order:=xlAscending
    ActiveSheet.AutoFilter.Sort.Apply
    'Dupletten entfernen
    Startzelle = "L1"
    For i = 1 To 1500
    If Range(Startzelle).Offset(i + 1, -3) = "" Then Exit For
    If Range(Startzelle).Offset(i + 1, 0).Value = "" Then Range(Startzelle).Offset(i + 1, 2). _
    Value = Range(Startzelle).Offset(i + 1, -2).Value
    If Range(Startzelle).Offset(i + 1, 0).Value = Range(Startzelle).Offset(i, 0).Value And  _
    Range(Startzelle).Offset(i, 0).Value  "" Then Range(Startzelle).Offset(i + 1, 0).EntireRow. _
    Delete: i = i - 1
    Next i
    'Nutzlose Spalten löschen
    Range("A:C,E:H,J:K").Delete Shift:=xlToLeft
    ActiveSheet.AutoFilter.Sort.SortFields.Clear
    ActiveSheet.AutoFilter.Sort.SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=  _
    xlAscending
    ActiveSheet.AutoFilter.Sort.Apply
    'Anzahl Stellen im selektiertem Jahr -> Multiplikator
    '  ActiveSheet.Columns("B:B").Find(What:=Ident).Activate: Stellen_Ist = Len(ActiveCell.Offset(0, _
    1).Value)
    '  Stellen_Soll = GetValue(Modulpfad, Modul, "Annahmen", "F16")
    '  Multiplikator = 10 ^ (Stellen_Soll - Stellen_Ist)
    ActiveSheet.Columns("B:B").Find(What:=Ident).Activate: Stellen_Ist = Len(ActiveCell.Offset(0, _
    1).Value)
    Workbooks.Open Filename:=Modulpfad & Modul
    Stellen_Soll = Workbooks(Modul).Worksheets("Annahmen").Range("F16").Value
    Multiplikator = 10 ^ (Stellen_Soll - Stellen_Ist)
    Workbooks(Konten).Activate
    'Formatierung
    ActiveWindow.DisplayGridlines = False
    Columns("C:E").Cut: Range("A1").Insert Shift:=xlToRight
    Columns("D:E").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("G:G").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("A:H").EntireColumn.AutoFit
    Cells.Replace What:="AKTIVA", Replacement:="Aktiva", MatchCase:=True
    Cells.Replace What:="PASSIVA", Replacement:="Passiva", MatchCase:=True
    'Berechnungsformeln
    Range("D2:D" & i + 1 & "").FormulaR1C1 = "=IF(RC1="""","""",SUMPRODUCT(('" & Modulpfad & "[" & _
    Modul & "]Ist-Daten'!R11C3:R10000C3=RC1*" & Multiplikator & ")" & _
    "*('" & Modulpfad & "[" & Modul & "]Ist-Daten'!R11C3:R11C13=" & Jahr & "),'" & Modulpfad & " _
    [" & Modul & "]Ist-Daten'!R11C3:R10000C13))"
    Range("G2:G" & i + 1 & "").FormulaR1C1 = "=IFERROR(VLOOKUP(RC1*" & Multiplikator & ",'" &  _
    Modulpfad & "[" & Modul & "]Ist-Daten'!R12C3:R10000C7,5,FALSE),"""")"
    Range("I2:I" & i + 1 & "").FormulaR1C1 = "=VLOOKUP(RC1*" & Multiplikator & ",'" & Modulpfad &  _
    "[" & Modul & "]Ist-Daten'!R12C3:R10000C7,3,FALSE)"
    Rows("2:7").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    For j = 1 To 4
    If j = 1 Then begriff = "Summe Aktiva"
    If j = 2 Then begriff = "Summe Passiva"
    If j = 3 Then begriff = "Jahresüberschuss": Begriff_1 = "Jahresfehlbetrag"
    If j = 4 Then begriff = "Bilanzgewinn": Begriff_1 = "Bilanzverlust"
    On Error Resume Next
    Zeile = Cells.Find(What:=begriff, After:=ActiveCell, LookAt:=xlWhole, MatchCase:=True).Row
    If Zeile = "" Then Zeile = Cells.Find(What:=Begriff_1, LookAt:=xlWhole, MatchCase:=True).Row
    Range("A" & Zeile & ":I" & Zeile & "").Cut: Range("A" & j + 1 & "").Select: ActiveSheet.Paste: _
    Rows("" & Zeile & ":" & Zeile & "").Delete Shift:=xlUp 'Bilanzsumme Aktiva
    On Error GoTo 0
    Zeile = ""
    Next j
    '  Range("D2").Value = GetValue(Modulpfad, Modul, "Ist_Daten", "M7")
    '  Range("D3").Value = GetValue(Modulpfad, Modul, "Ist_Daten", "M8")
    '  Range("D4").Value = GetValue(Modulpfad, Modul, "Ist_Daten", "M9")
    Range("D2").Value = Workbooks(Modul).Worksheets("Ist-Daten").Range("M7").Value
    Range("D3").Value = Workbooks(Modul).Worksheets("Ist-Daten").Range("M8").Value
    Range("D4").Value = Workbooks(Modul).Worksheets("Ist-Daten").Range("M6").Value
    Range("A1:I7").Font.Bold = True
    Range("H2:H5").Copy: Range("B2").PasteSpecial Paste:=xlPasteValues: Application.CutCopyMode =  _
    False
    Range("F2:I5, H1:I500").ClearContents
    Columns("A:G").EntireColumn.AutoFit
    Range("C1, C7, F7").Value = "Original": Range("D1, D7, G7").Value = "Modul"
    '      ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources, Type:=xlExcelLinks
    DoEvents
    Calculate
    DoEvents
    Range("E2:E4, E8:E" & i + 1 & "").FormulaR1C1 = "=IF(OR(ROUND(ABS(RC[-2]),2)ROUND(ABS(RC[-1] _
    ),2),AND(ROUND(RC[-2]*-1,2)=ROUND(RC[-1],2),RC[1]=RC[2])),RC[-2]-RC[-1],"""")"
    '  Range("D2:I" & i + 1 & "").Copy: Range("D2").PasteSpecial Paste:=xlPasteValues: Application. _
    CutCopyMode = False
    Range("C2:E" & i + 1 & "").NumberFormat = "#,##0_ ;[Red]-#,##0 "
    Columns("A:I").EntireColumn.AutoFit
    'Bedingte Formatierung
    Cells.FormatConditions.Delete
    Range("A8:G100").Select
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=UND($F8$G8;$F8"""")"
    With Selection.FormatConditions(1).Interior
    .ThemeColor = xlThemeColorAccent6
    .TintAndShade = 0.799981688894314
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Range("A8:G100").Select
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$E8"""""
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
    .ThemeColor = xlThemeColorAccent5
    .TintAndShade = 0.799981688894314
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Range("B2:E4").Select
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$E4"""""
    With Selection.FormatConditions(1).Interior
    .ThemeColor = xlThemeColorAccent5
    .TintAndShade = 0.799981688894314
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Selection.AutoFilter
    ActiveWorkbook.SaveAs Filename:=Pfad_Input & "Kontennachweis_bearbeitet.xlsx", FileFormat:= _
    xlOpenXMLWorkbook
    Workbooks(Modul).Close 'Kritischer Punkt!
    Range("A1").Select
    Application.ScreenUpdating = True
    Application.AskToUpdateLinks = True
    Application.DisplayAlerts = True
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
    Debug.Print "Gesamt: " & Timer - Start
    End Sub
    

  • 10
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Excelabsturz
    14.07.2017 11:37:39
    Sven
    Hallo Jan,
    wir hatten hier vor kurzem ähnliche Probleme, dass beim Abfragen aus einer ext. Datenbank selbes Problem aufgetreten ist. Dies lag an einem fehlerhaften Microsoft Security Update (KB3178690). Hierfür hatte Microsoft im Nachgang einen weiteren Patch rausgebracht, danach hatte alles wieder sauber funktioniert. Eventuell kannst Du Dir einmal diesen Lösungsansatz ansehen.
    Grüße
    Sven
    AW: Excelabsturz
    14.07.2017 14:55:02
    Jan
    Hi Jens,
    danke für Dein Feedback. Habe den Patch KB3191855 (scheint mir die Antwort auf den von Dir genannten fehlerhaften Patch) versucht zu installieren. Nachricht: Von dem auf diesem System installierten Paket sind keine Produkte betroffen. Ich nutze Microsoft Office 365 ProPlus und der patch ist - glaube ich - für Excel 2010.
    Mache ich was falsch oder habt Ihr weitere Ideen? Passiert in der Menge seit gestern morgen - weiss nur nicht, ob ich einen Programmierfehler gemacht habe oder etwas am Excel nicht stimmt...
    BG,
    Jan
    Anzeige
    AW: Excelabsturz
    14.07.2017 15:55:26
    Sven
    Hi,
    also die Programmierung sieht auf den ersten Blick sauber aus, würde da jetzt nichts finden, was einen Absturz hervorrufen könnte.
    Das habe ich noch gefunden, vielleicht hilft es weiter:
    To resolve the issue check if the DDE option in Excel 2016 is selected.
    1.Close all Excel workbooks and files.
    2.Open a new blank Excel 2016 workbook.
    3.Click on File and navigate to > Options > Advanced.
    4.Under the Display option make sure to uncheck (remove the tick mark) if the option Ignore other applications that use Dynamic Data Exchange (DDE). In case this option is already deselected (unchecked) make sure to check (tick) this option.
    5.Apply the settings changes by click on OK.
    6.Close Excel 2016.
    7.Make sure to restart the computer.

    Quelle:
    
    https://answers.microsoft.com/en-us/msoffice/forum/msoffice_excel-mso_win10/excel-2016-keeps-crashing/7523bbaa-aa65-4f54-a19c-4959e8ac9790
    

    Anzeige
    AW: Excelabsturz
    14.07.2017 18:56:14
    Jan
    Hi Jens,
    danke für den Tip. Diese Option ist bei Optionen - erweitert - anzeige nicht zu finden. Habe ein wenig gegoogelt und bestätigt gefunden, dass dies bei Excel 2016 dort sein sollte. Zu Office 365 habe ich leider nichts gefunden. Zwischenzeitlich hatte ich auch mit MS Kontakt. Die haben (1) ein Tool OffCat und (2) SARA geschickt. Hat leider beides nichts geholfen, so dass ich leider noch immer nicht weiß, ob es an der Datei oder an Excel liegt.
    Offensichtlich passiert es immer, wenn die Datei gespeichert und / oder geschlossen werden soll. Das "Immer" ist wie beschrieben falsch, aber wenn ein Fehler passiert scheint dies beim Schliessen und/oder Speichern zu passieren. Ich vermute also es muss etwas mit dem Zugriff auf die (zu überschreibenden) Dateien zu tun haben. Dort finden sich - nach Abstürzen - neben der Originaldatei auch Dateien wie "DC2DB000" oder "A3BCA000" mit 0kb.Ich kenne so etwas nur, wenn es Syncprobleme gibt...
    Anzeige
    AW: Excelabsturz
    15.07.2017 22:27:21
    Jan
    Hallo zusammen,
    durch stetes Probieren ist es mir gelungen, den Fehler gezielt zu reproduzieren bzw. aktiv auszulösen. Wenn ich den im Initialpost gelisteten Code ausführe und nur die generierte Datei (nicht Excel gesamt) schliesse wird bei jedem folgenden (anderen) Makro ein Fehler ausgelöst, der die zugrundeliegende Datei offensichtlich korrumpiert.
    Wenn ich aber nach Ausführung des gelisteten Codes Excel in Gänze schliesse und nach erneutem Öffnen ein beliebiges anderes Makro ausführe gibt es kein Problem. Offensichtlich hat es also damit zu tun, ob Excel zwischendurch "geleert" wurde. Der Versuch den Zwischenspeicher am Ende des gelisteten Codes zu leeren bringt nichts. Bei nachfolgender Makroausführung ohne Excelneustart stürzt Excel ab.
    Gibt es noch weitere Speicher o.ä, die zu leeren sind? Oder hat jemand eine Idee, was der Code macht, was - ohne Excel Neustart - solche Probleme auslöst? Vielleicht hilft es noch mit bei der Analyse zu wissen, dass ich den gelisteten Code selbst x-mal nacheinander (ohne Excel Neustart) ausführen kann ohne dass es zum Absturz kommt. Nur wenn ich nachfolgend ein anderes Makro ausführe...
    Bin für jeden Hinweis dankbar, da ich mir dieses Verhalten null erschliessen und damit auch nicht beheben kann.
    BG,
    Jan
    Anzeige
    AW: Excelabsturz
    16.07.2017 22:32:37
    Peter
    Hallo Jan,
    ich bin zwar kein hundertprozentiger VBA-Experte, möchte jedoch auf folgendes hinweisen: Du benutzt die Variante "Modul". Dies ist in VBA ein feststehender Begriff. Die Variante könnte sich u. U. damit nicht vertragen. Versuch es mal mit einem anderen Varianten-Namen.
    Gruß
    Peter Kloßek
    AW: Excelabsturz
    17.07.2017 08:38:37
    Jan
    Hi Peter,
    danke fürs Mitdenken. War es leider nicht. Anderer Variablennamen hat zum selben Verhalten geführt - nach Makroausführung ohne Schliessen: Absturz und mit Schliessen: sauber durchgelaufen.
    Bin dankbar für weitere Ideen.
    Gute Woche für alle,
    Jan
    AW: Excelabsturz
    17.07.2017 14:33:59
    Gunter
    Hallo Jan
    Mal nur so, hast du das Ganze schon mal auf einem anderen PC, eventuell auch mit einer anderen Excel Version laufen lassen? Ich würde mal alles an Code rausschmeissen, was nicht zum öffnen und schliessen der Dateien notwendig ist und schauen, ob das Problem dann immer noch existiert.
    Gruss
    Gunter
    Anzeige
    AW: Excelabsturz
    17.07.2017 16:22:11
    Peter
    Hallo Jan,
    ich melde mich noch einmal. Ich hatte selbst auch schon Ärger mit dem "Close"-Befehl. Und zwar genau wie in Deinem Fall bei langen oder sehr langen Makros. Die Lösung war, den Close-Befehl in einen eigenen Makro zu packen, der mit dem ersten Makro verkettet ist.
    Hier meine Beispiel-Lösung (Dateiname "BERIGEN"):
    https://www.herber.de/bbs/user/114915.xlsm
    Bitte ändere die Endung ".xlsm" in die für Dein System richtige ab. In dem zusätzlichen Makro muss die Variante für den Dateinamen erneut definiert werden. Die Datei bitte mit dem Namen "BERIGEN.?" speichern. Nach Aufruf des Makro1 sollte eine Datei mit dem Namen "Bericht Juni 2017.?" erzeugt werden.
    Gruß
    Peter Kloßek
    Anzeige
    AW: Excelabsturz
    18.07.2017 22:18:50
    Jan
    Hallo zusammen,
    zuallererst, mein Problem scheint gelöst. Insofern ein großes Dankeschön an alle, die aktiv mitgeholfen / mitgedacht haben.
    Ich habe einfach alles durchprobiert, was auch nur etwas außer-/ungewöhnlich sein kann. Auf mehreren Windowsrechnern, mit verschiedenen Excel Versionen, der 32- und 64-bit Alternative etc. - überall war der Fehler reproduzierbar. Interessanterweise - nur auf dem Mac (Office für Mac 2012) gab es keine Probleme.
    Am Ende war die Lösung durch Zufall gefunden, eine der involvierten Dateien als .xlsm (statt .xlsb) zu speichern. Ich nutze .xlsb für reine Excellösungen ganz gern, da diese bis zu 30% Speicherplatz sparen und damit beim Öffnen / Schliessen deutlich performanter sind. Warum die .xlsb in diesem Fall dieses merkwürdige Verhalten auslöste ist mir - und auch dem Microsoft Support - vollkommen unklar. Zumal dies das erste mal auftauchte. Gesamtstruktur mit größer 10 involvierten Dateien und 30 ineinandergreifenden Prozeduren hatte vorher trotz intensiver Nutzung nie Probleme....
    Wie auch immer - wenn ich das "Warum" auch nicht erklären kann hilft es dem einen oder anderen vielleicht als eine zu probierende Option, wenn ein solcher Fehler auftaucht. Wer das "Warum" beisteuern kann macht uns alle - zumindest mich - wieder etwas schlauer ;-))
    Beste Grüsse,
    Jan
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige