Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Objektvariable nicht festgelegt (Fehler 91)

Objektvariable nicht festgelegt (Fehler 91)
04.07.2018 10:30:59
Heinz
Hallo im Forum
Seit heute kommt bei einen Schichtplan in der Firma plötzlich die Fehlermeldung
bei If ActiveWorkbook.Name
" Objektvariable nicht festgelegt (Fehler 91) "
Warum ? wieso ?
Könnte mir bitte jemand weiterhelfen ?
Danke
Sg, Heinz
  • 
    Private Sub Workbook_open()
    If ActiveWorkbook.Name  ThisWorkbook.Name Then Exit Sub
    Dim i As Long
    Dim VMonat  As Variant
    Dim TB As Variant
    Dim wks As Worksheet
    'Call BlattSchutz_Aufheben
    'Application.Statusbar = ("Dieses Pogramm wurde von Heinz Holzmann erstellt. Bei Fragen oder  _
    Probleme   email an   heinz_holzmann@aon.at   Tel.:07587/69 62  Mobil: 0699/819 818 46")
    Application.ScreenUpdating = False
    On Error Resume Next
    Application.ScreenUpdating = False
    'Application.EnableEvents = False                   'diese Zeile nach unten verschoben fcs 20   _
    _
    1204 02
    VMonat = Array(" ", "Jänner", "Februar", "März", "April", "Mai", "Juni", "Juli", _
    "August", "September", "Oktober", "November", "Dezember")
    ThisWorkbook.Worksheets("MA").Activate                              'Neu   fcs 2012 04 02
    With ThisWorkbook.Worksheets(VMonat(Month(VBA.Date)))
    .Select
    .Cells(1, Day(VBA.Date) + 2).EntireColumn.Select
    End With
    Application.EnableEvents = False      'Zeile verschoben fcs 20 12 04 02
    For Each wks In Worksheets
    wks.Protect Password:="vetro", DrawingObjects:=False, Contents:=True, Scenarios:=True _
    , AllowFormattingCells:=True
    Next
    Call BlattSchutz_Ein
    Worksheets("Schichttausch").Visible = False
    'Worksheets("Mitarbeiterblatt").Visible = True 'Wieder löschen
    'Worksheets("Mitarbeiterblatt").Visible = False
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    End Sub
    


  • Anzeige

    13
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Objektvariable nicht festgelegt (Fehler 91)
    04.07.2018 11:06:19
    ChrisL
    Hi
    Mit ActiveWorkbook.Name kann man eigentlich nicht viel falsch machen. Teste die Datei mal auf einem anderen PC. Vielleicht ist Office defekt.
    Ansonsten eine Beispieldatei laden.
    cu
    Chris
    AW: Objektvariable nicht festgelegt (Fehler 91)
    04.07.2018 11:10:36
    Heinz
    Hallo Chris
    Erstmals Danke für dein Feedback
    "Teste die Datei mal auf einem anderen PC. Vielleicht ist Office defekt."
    Habe es schon auf 4 Pc getestet.
    Muß die Datei noch verkleinern
    Sg, Heinz
    Anzeige
    AW: Objektvariable nicht festgelegt (Fehler 91)
    04.07.2018 11:11:04
    mmat
    Hallo
    das ist jetzt mal ein Schuss in blaue:
    das workbook hat keine sichtbaren Arbeitsblätter.
    AW: Objektvariable nicht festgelegt (Fehler 91)
    04.07.2018 11:28:39
    Heinz
    Hallo mmat
    Da könntest du richtig liegen. Aber wie kann ich das Makro zum einblenden zum laufen bringen?
    Es kommt ja beim öffnen der Datei der Fehler.
    HABE AUCH IN DIESER ARBEITSMAPPE bei
    
    Private Sub Workbook_open()
    Call AlleBlätterEinblenden reingeschrieben.
    Das Makro zum einblenden.
    
  • Sub AlleBlätterEinblenden() Dim sh As Worksheet For Each sh In Sheets sh.Visible = True Next sh End Sub


  • Danke, Heinz
    Anzeige
    AW: Objektvariable nicht festgelegt (Fehler 91)
    04.07.2018 11:42:42
    mmat
    Hallo Heinz,
    für mich macht der Befehl da am Anfang eigentlich gar keinen Sinn.
    Ich vermute mal, du willst sicherstellen, dass die folgenden Anweisungen nur in einem bestimmten Workbook ausgeführt werden. Dafür gibt's bessere Methoden.
    Befehle wie "With ThisWorkbook.Worksheets(VMonat(Month(VBA.Date)))" sind hier zielführend.
    Sowas wie "For Each wks In Worksheets" muß ergänzt werden. -> ""For Each wks In ThisWorkbook.Worksheets"
    Anzeige
    AW: Danke an ChrisL & mmat
    04.07.2018 11:43:03
    Heinz
    Hallo Chris & mmat
    Unsere IT-Abteilung hatte die letzte Speicherung von der Datei wiederherstellen können.
    Mittels Datensicherung. Jetzt läuft alles wieder ohne Fehler.
    Recht herzlichen Dank, für Eure Unterstützung.
    SG, Heinz
    AW: Danke an ChrisL & mmat
    04.07.2018 11:44:44
    mmat
    Hallo Heinz,
    na dann bis zum nächsten mal :-)
    Anzeige
    AW: Nur ein Versuch, da ich kein ...
    04.07.2018 11:47:04
    Dieter(Drummer)
    Hallo Heinz;
    ... Spezialist, wie die anderen hier, bin.
    Versuch es mal so:
    Private Sub Workbook_open()
    Dim sh As Worksheet
    For Each sh In Sheets
    sh.Visible = True
    Next sh
    End Sub
    

    Gruß, Dieter(Drummer
    naja, abschreiben kannst Du wenigstens..
    04.07.2018 12:13:10
    robert
    
    Sub AlleBlätterEinblenden()
    Dim sh As Worksheet
    For Each sh In Sheets
    sh.Visible = True
    Next sh
    End Sub
    

    Anzeige
    mmat: kann nicht sein
    04.07.2018 20:25:10
    Uduuh
    Hallo,
    eins muss sichtbar sein.
    Gruß aus’m Pott
    Udo

    AW: mmat: kann nicht sein / Oh doch !!
    05.07.2018 10:00:30
    mmat
    Hallo,
    ich hab sowas schonmal gebaut, allerdings als "*.xla". Bei den normalen xls? geht das wohl eher nicht.
    Welchen Grund könnte es noch geben, dass ActiveWorkbook eben doch nicht der soeben geöffneten Datei entspricht sondern undefiniert ist?
    Irrtum des Users bezüglich des Inhalts seiner Fehlermeldung ?
    Anzeige
    Hah, ich habs !!!!!
    05.07.2018 10:11:26
    mmat
    Ich hab mir nochmal angeguckt, was ich da so gebastelt habe. Es ist richtig, dass sich die visible - Eigenschaft des letzten Blatts nicht verändern läßt.
    Was geht ist:
    ThisWorkbook.Windows(1).Visible = True / False.
    Damit ist das workbook komplett unsichtbar (ausser im Makro-Editor) und kann auch nicht zum ActiveW9orkbook werden.
    Anzeige
    die Zeile ist unsinnig
    04.07.2018 20:30:45
    Uduuh
    Hallo,
    denn bei der Ausführung von Workbook_open sind Thisworkbook und Activeworkbook identisch.
    Gruß aus’m Pott
    Udo

    ;

    Forumthreads zu verwandten Themen

    Anzeige
    Anzeige
    Anzeige
    Anzeige
    Anzeige
    Anzeige

    Infobox / Tutorial

    Umgang mit Laufzeitfehler 91 in Excel VBA


    Schritt-für-Schritt-Anleitung

    1. Identifizieren des Problems: Wenn der Laufzeitfehler 91 "Objektvariable oder With-Blockvariable nicht festgelegt" auftritt, bedeutet dies in der Regel, dass du auf ein Objekt zugreifen möchtest, das nicht existiert oder nicht korrekt initialisiert wurde. Ein häufiges Beispiel ist der Zugriff auf ActiveWorkbook oder ThisWorkbook ohne dass diese Objekte verfügbar sind.

    2. Überprüfen des Codes: Gehe deinen VBA-Code durch und suche nach der Zeile, in der der Fehler ausgelöst wird. Ein Beispiel könnte sein:

      If ActiveWorkbook.Name <> ThisWorkbook.Name Then Exit Sub
    3. Ändern der Referenzen: Stelle sicher, dass du auf ThisWorkbook verweist, um auf das aktuelle Workbook zuzugreifen. Zum Beispiel:

      With ThisWorkbook.Worksheets("SheetName")
    4. Fehlerbehandlung einfügen: Implementiere eine Fehlerbehandlung, um den Fehler abzufangen und eine aussagekräftige Fehlermeldung auszugeben:

      On Error GoTo ErrorHandler
      ' Dein Code hier
      Exit Sub
      
      ErrorHandler:
      MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
    5. Testen: Führe dein Makro erneut aus, um sicherzustellen, dass der Fehler behoben wurde.


    Häufige Fehler und Lösungen

    • Problem: ActiveWorkbook ist nicht verfügbar.

      • Lösung: Stelle sicher, dass du eine Arbeitsmappe geöffnet hast. Nutze ThisWorkbook statt ActiveWorkbook.
    • Problem: Der Fehler tritt auf, weil keine Arbeitsblätter sichtbar sind.

      • Lösung: Füge ein Makro hinzu, das alle Arbeitsblätter sichtbar macht:
        Sub AlleBlätterEinblenden()
        Dim sh As Worksheet
        For Each sh In ThisWorkbook.Sheets
            sh.Visible = True
        Next sh
        End Sub
    • Problem: Der Fehler tritt im Workbook_Open-Ereignis auf.

      • Lösung: Überprüfe, ob die Datei korrekt geladen wurde und dass alle Objekte vorhanden sind.

    Alternative Methoden

    • Verwendung von ThisWorkbook: Anstelle von ActiveWorkbook solltest du immer ThisWorkbook verwenden, um sicherzustellen, dass du auf das aktuelle Workbook zugreifst, in dem der Code ausgeführt wird.

    • Direkte Referenzierung von Arbeitsblättern: Nutze immer eine direkte Referenzierung zu Arbeitsblättern, um Verwirrungen zu vermeiden:

      With ThisWorkbook.Worksheets("MA")

    Praktische Beispiele

    Hier ist ein Beispiel, das den Laufzeitfehler 91 umgeht:

    Private Sub Workbook_Open()
        Dim sh As Worksheet
        On Error Resume Next
        For Each sh In ThisWorkbook.Sheets
            sh.Visible = True
        Next sh
        On Error GoTo 0
    End Sub

    In diesem Beispiel wird sichergestellt, dass alle Blätter sichtbar sind, bevor andere Operationen ausgeführt werden.


    Tipps für Profis

    • Debugging-Tools verwenden: Nutze die Debugging-Tools von Excel VBA, um den Code Schritt für Schritt zu überprüfen und den genauen Punkt zu identifizieren, an dem der Fehler auftritt.

    • Fehlerprotokollierung: Implementiere eine Fehlerprotokollierung, die dir hilft, die Fehlerquellen zu identifizieren, besonders in großen Projekten.

    • Module sauber halten: Halte deine Module gut strukturiert und dokumentiere deinen Code, um zukünftige Fehlerquellen zu minimieren.


    FAQ: Häufige Fragen

    1. Was ist der Laufzeitfehler 91 in Excel VBA? Der Laufzeitfehler 91 tritt auf, wenn du versuchst, auf ein Objekt zuzugreifen, das nicht festgelegt wurde. Dies geschieht häufig, wenn ActiveWorkbook oder ThisWorkbook nicht korrekt referenziert wird.

    2. Wie kann ich den Fehler 91 beheben? Überprüfe deinen Code auf korrekte Verwendungen von Objektvariablen und stelle sicher, dass alle benötigten Objekte vorhanden sind, bevor du darauf zugreifst. Verwende ThisWorkbook anstelle von ActiveWorkbook, um sicherzustellen, dass du auf das richtige Workbook zugreifst.

    3. Was mache ich, wenn keine Arbeitsblätter sichtbar sind? Erstelle ein Makro, das alle Arbeitsblätter sichtbar macht, bevor du andere Operationen durchführst.

    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