Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA-schwerwiegender Fehler

VBA-schwerwiegender Fehler
OlliB
Hallo Leute,
ich hab ein Problem hier auf der Arbeit mit einer Excel-Datei, die ich selber damals unter Office 2003 angelegt habe. Beim Starten der Datei wird sofort eine doch recht umfangreiche UF geöffnet und mit Daten befüllt. Unter Office 2003 war das kein Problem. Seit Sommer letzten Jahres haben wir nun die 2007er Version und es tritt folgende Merkwürdigkeit auf:
Die Datei öffnet sich, die UF versucht sich wie gewohnt zu initialisieren und Excel bricht mit einem schwerwiegenden Fehler ab.
Öffne ich die Datei und starte das Makro zur Initialisierung manuell, läuft alles sauber. Hab mittels Debugger und Co. versucht herauszufinden, wann/wo das Problem auftritt..keine Chance.
Das Problem tritt immer nur dann auf, wenn die UF automatisch nach Dateiöffnung ohne "Zwischenpause" sich aufbauen soll. Ich scheine da Excel 2007 mit der UF zu überfordern. Mit einem "Wait-Befehl" klappt es leider auch nicht.
Hat irgendwer eine Idee, woran das liegen könnte bzw. wie ich das Problem lösen könnte (ausser UF manuell starten)?
Viele Grüße
Olli
Anzeige

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

Betreff
Benutzer
Anzeige
AW: VBA-schwerwiegender Fehler
28.02.2011 13:22:52
Holger,
Hi Olli,
wie holst du denn die Daten aus der UF?
Falls die Ursache des Fehler das Überschneiden von Schritten resp Prozessen ist, hilft die vielleicht diese Function weiter, die den Ablauf des makros solange unterbricht, bis die Aktion bendet ist.
Public Function ShellWait(ByVal Exec As String, _
Optional WindowStyle As VbAppWinStyle = vbMinimizedFocus) _
As Long
Dim nTaskId As Long
Dim nHProcess As Long
Dim nExitCode As Long
Const STILL_ACTIVE = &H103
Const PROCESS_QUERY_INFORMATION = &H400
Application.StatusBar = "SQL Abfrage wird ausgeführt ..."
nTaskId = Shell(Exec, WindowStyle)
nHProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, nTaskId)
Do
DoEvents
GetExitCodeProcess nHProcess, nExitCode
Loop While nExitCode = STILL_ACTIVE
CloseHandle nHProcess
ShellWait = nExitCode
Application.StatusBar = "SQL Abfrage erfolgreich ausgeführt!"
End Function

Anzeige
AW: VBA-schwerwiegender Fehler
28.02.2011 13:46:55
OlliB
Hallo Holger,
danke für den Ansatz, aber die Ursache scheint eher zu sein, dass die UF an sich einfach zu mächtig mit zu vielen Formularfeldern etc. ist. Die Daten selber zieht sich die UF aus der Excel-Datei selber heraus. Kein SQL o. importieren aus anderen Dateien.
Mysteriös ist auch, dass nach manuellem Start des Makros und ordnungsgemäßen initialisieren der UF auch danach bei erneutem Starten einmalig ! alles automatisch klappt. Speicher ich dann die Datei noch einmal und starte sie dann erneut, kommt wieder der schwerwiegende Fehler. Ich befürchte, ich muss die UF entschlacken. Oder hat wer noch eine Idee?
Anzeige
AW: VBA-schwerwiegender Fehler
28.02.2011 14:00:35
Holger,
Hi Olli,
ich hatte auch ein ähnliches Problem mit einer UF. Irgendwie war damals der Aufruf der Prozedur und des Codes nicht in der gewünschten Reihenfolge. So wurde in der UF etwas abgefragt, was gar nicht mehr da war. Das fällt im F8 Modus nicht auf, weil es da ja wesentlich langsam geht.
Entschlacken ist aber immer gut, sorry, dass ich nicht helfen kann.
Anzeige
AW: VBA-schwerwiegender Fehler
28.02.2011 23:42:45
Gerd
Hallo Olli!
Wie sieht der Code des Userform_Initialze aus ?
Gruß Gerd
;
Anzeige
Anzeige

Infobox / Tutorial

Fehlerbehebung bei schwerwiegenden Fehlern in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Öffne deine Excel-Datei und stelle sicher, dass die Userform (UF) korrekt initialisiert wird.

  2. Prüfe den Code im UserForm_Initialize-Ereignis. Achte darauf, dass alle benötigten Daten und Elemente vorhanden sind, bevor sie aufgerufen werden.

  3. Verwende den Debugger: Starte das Makro im Debug-Modus (F8-Taste) und beobachte, wo der schwerwiegende Fehler auftritt.

  4. Blockiere die Ausführung: Implementiere eine Warteschleife, um sicherzustellen, dass Prozesse in der richtigen Reihenfolge ablaufen. Verwende dafür den folgenden VBA-Code:

    Public Function ShellWait(ByVal Exec As String, _
    Optional WindowStyle As VbAppWinStyle = vbMinimizedFocus) _
    As Long
        Dim nTaskId As Long
        Dim nHProcess As Long
        Dim nExitCode As Long
        Const STILL_ACTIVE = &H103
        Const PROCESS_QUERY_INFORMATION = &H400
        Application.StatusBar = "SQL Abfrage wird ausgeführt ..."
        nTaskId = Shell(Exec, WindowStyle)
        nHProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, nTaskId)
        Do
            DoEvents
            GetExitCodeProcess nHProcess, nExitCode
        Loop While nExitCode = STILL_ACTIVE
        CloseHandle nHProcess
        ShellWait = nExitCode
        Application.StatusBar = "SQL Abfrage erfolgreich ausgeführt!"
    End Function
  5. Überprüfe die Userform: Reduziere die Anzahl der Steuerelemente in der Userform, um die Belastung für Excel zu verringern.


Häufige Fehler und Lösungen

  • Schwerwiegender Fehler: Dieser Fehler tritt häufig auf, wenn Excel versucht, eine Userform ohne die nötigen Daten zu initialisieren. Stelle sicher, dass alle erforderlichen Daten vor dem Starten der Userform verfügbar sind.

  • Systemfehler &h8000ffff: Dieser Fehler kann auf ein Problem mit den VBA-Einstellungen oder beschädigten Dateien hinweisen. Überprüfe deine Excel-Installation und führe gegebenenfalls eine Reparatur durch.

  • Fehlermeldung bei der Übergabe: Bei der Weitergabe des Befehls an das Programm kann es zu einem Fehler kommen, wenn nicht alle Variablen und Objekte ordnungsgemäß definiert sind. Achte darauf, dass alle Objekte korrekt initialisiert sind.


Alternative Methoden

  • Manuelles Starten des Makros: Wenn das automatische Starten der Userform nicht funktioniert, starte das Makro manuell, um zu sehen, ob der Fehler weiterhin besteht.

  • Verwende Timer: Implementiere einen Timer, um eine Verzögerung einzuführen, bevor die Userform geladen wird. Dies kann helfen, den schwerwiegenden Fehler zu vermeiden, insbesondere in Excel 2007.

  • Code optimieren: Reduziere den Code in der Userform, um die Ausführungsgeschwindigkeit zu erhöhen und potenzielle Fehlerquellen zu minimieren.


Praktische Beispiele

  • Beispiel für das Initialisieren der Userform:

    Private Sub UserForm_Initialize()
        ' Beispielcode, um Daten zu laden
        If Not IsEmpty(Sheet1.Range("A1").Value) Then
            Me.TextBox1.Value = Sheet1.Range("A1").Value
        End If
    End Sub
  • Fehlerbehandlung hinzufügen:

    On Error GoTo ErrorHandler
    ' Dein Code hier
    Exit Sub
    
    ErrorHandler:
        MsgBox "Ein Fehler ist aufgetreten: " & Err.Description

Tipps für Profis

  • Vermeide komplexe Userforms: Halte die Userforms einfach und übersichtlich, um die Wahrscheinlichkeit eines schwerwiegenden Fehlers zu verringern.

  • Regelmäßige Sicherungen: Speichere deine Arbeit regelmäßig, um Datenverluste bei schwerwiegenden Fehlern zu vermeiden.

  • Nutze Kommentare im Code: Dokumentiere deinen Code sorgfältig, um die Wartung und das Debugging zu erleichtern.


FAQ: Häufige Fragen

1. Was bedeutet „schwerwiegender Fehler“ in Excel? Ein schwerwiegender Fehler tritt auf, wenn Excel auf ein Problem stößt, das die Ausführung eines Makros oder das Laden einer Userform verhindert.

2. Wie kann ich einen Systemfehler &h8000ffff beheben? Überprüfe deine Excel-Installation auf Fehler, führe eine Reparatur durch und stelle sicher, dass alle Referenzen im VBA-Editor korrekt 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