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

Forumthread: Laufzeitfehler 91

Laufzeitfehler 91
17.01.2017 16:47:12
Katjuscha
Hallo zusammen,
habe mir folgendes Makro zusammen geschustert.
Habe jetzt allerdings diese Fehlermeldung mit der ich nicht klar komme.
Option Explicit
Public strPathAlt() As String
Public strPathNeu() As String
Sub HyperlinksÄndern()
Dim WB As Workbook
Dim lngLetzteZeile As Long
Dim lngZeile As Long
'in Lokalitäten die Daten in 2 Felder einlesen
With WB("G:\FF-Listen\HL_Gemarkungen.xls")
lngLetzteZeile = .Cells(Rows.Count, 1).End(xlUp).Row
ReDim strPathAlt(lngLetzteZeile)
ReDim strPathNeu(lngLetzteZeile)
For lngZeile = 2 To lngLetzteZeile
DoEvents
strPathAlt(lngZeile) = .Cells(lngZeile, 1)
strPathNeu(lngZeile) = .Cells(lngZeile, 2)
Next lngZeile
End With
End Sub
Sub ErsetzeAlleHyperlink()
Dim alterPfad As String
Dim neuerPfad As String
Dim strHyperLink As String
Dim HL As Hyperlink
ActiveWorkbook.BuiltinDocumentProperties("Hyperlink base") = ""
' durch alle Hyperlinks im Blatt laufen, Blattname muss angepasst werden
For Each HL In ActiveSheet.Hyperlinks
' und in der Adresse des Links den Teil alt gegen neu tauschen
strHyperLink = Replace(strHyperLink, "\\hpgue06\G-Archiv\Riss-Archiv\", "")
strHyperLink = Replace(strHyperLink, "/", "\")
strHyperLink = Replace(strHyperLink, "Risse\", "")
strHyperLink = Replace(strHyperLink, "Koordinaten\", "")
strHyperLink = Replace(strHyperLink, "Grenzniederschriften\", "")
Next
For Each HL In ActiveSheet.Hyperlinks
DoEvents
strHyperLink = HL.Address
'If hyper.Parent.Interior.ColorIndex = 3 Then
'Wenn im Hyperlink der alte Pfad...
If InStr(strHyperLink, alterPfad)  0 Then
'...dann mit dem neuen Pfad ersetzen
strHyperLink = Replace(strHyperLink, alterPfad, neuerPfad)
'Mit obiger Sub testen ob neuer Hyperlink iO
'Call Hyperlinks_testen
End If
'Gemäss Tabelle ersetzen...
For I = intStart To intEnde
DoEvents
If InStr(strHyperLink, strPathAlt(I))  0 Then
'...dann mit dem neuen Pfad ersetzen
strHyperLink = Replace(strHyperLink, strPathAlt(I), strPathNeu(I))
End If
Next I
Next
ActiveWorkbook.BuiltinDocumentProperties("Hyperlink base") = "\\fs02.local\Archiv62\ _
Zahlenwerk\Nachweise\"
Call HyperlinkTest
End Sub
In der Zeile:

With WB("G:\FF-Listen\HL_Gemarkungen.xls")

erhalte ich die Fehlermeldung Laufzeitfehler '91: Objektvariable oder With-Blockvariable nicht festgelegt!
Was soll ich damit anfangen?
Zur Erklärung was dieses Makro bewirken soll:
Ich habe 1400 Excel-Dateien,die mit massenhaft Hyperlinks versehen sind.
Jetzt hat sich der Ablageort der verlinkten Dateien geändert.
Einigen Teile des Hyperlink-Pfades kann ich generell problemlos löschen.
Jetzt kommt aber der schwierige Teil: einen Teil des Pfade muss ich abgleichen nach dem Prinzip enthält der Pfad das,dann ersetze durch dieses. Dafür habe ich eine zusätzliche Excel-Datei mit Spalte alt und Spalte neu.
Natürlich könnte ich auch 600 weitere Zeilen nach dem Prinzip:

strHyperLink = Replace(strHyperLink, "/", "\")
einfügen,aber ich dachte das geht bestimmt auch anders. Nur Wie?
Habe nicht wirklich Ahnung von VBA ist alles nur zusammengesucht.
Kann man das ganze vielleicht auch in einer Prozedur durchführen oder geht das nur so.
Bitte helft mir.
Gruß Katjuscha
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 91
17.01.2017 17:17:34
Mullit
Hallo,
..Dein Objekt ist falsch, wenn dann so, Tabelle müsstest Du anpassen:
With Workbooks("G:\FF-Listen\HL_Gemarkungen.xls").Worksheets(1)

Gruß, Mullit
AW: Laufzeitfehler 9
17.01.2017 17:26:53
Katjuscha
Hallo Mullit,
erst einmal Danke für deine schnelle Antwort.
Leider kommt jetzt die Fehlermeldung: Laufzeitfehler 9: Index außerhalb des gültigen Bereichs!
Und nun?
Gruß Katjuscha
Anzeige
AW: Laufzeitfehler 9
17.01.2017 17:39:02
Mullit
Hallo Katjuscha,
nu is Dein Workbook-Path falsch, das Workbook ist nicht vorhanden oder last but not least, es ist noch nicht geöffnet...
Gruß, Mullit
AW: Laufzeitfehler 9
17.01.2017 17:48:24
Luschi
Hallo Katjuscha,
geöffnete Excel-Dateien werden in Vba nur mit dem Dateinamen (also ohne Pfad) indiziert;
deshalb so: With Workbooks("HL_Gemarkungen.xls").Worksheets(1)
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Laufzeitfehler 9
18.01.2017 09:11:26
Katjuscha
Hallo Mullit, Hallo Luschi,
die Pfadangabe zu löschen war genau richtig. Jetzt ist die Fehlermeldung weg.
Wie kann ich jetzt vorab prüfen, ob die Datei auch wirklich offen ist und ansonsten öffnen?
Mit

Workbooks.Open ("HL_Gemarkungen.xls")
kann ich ja nur öffnen ohne Prüfung. Warum auch hier ohne Pfadangabe?
Könnt ihr mir erklären was im einzelnen mit dieser 1. Sub... hier gemacht wird? Es passiert nichts? Wie kann ich Sub 1 und Sub 2 zu einer verbinden?
Ich weiß viele Fragen aber ich habe keinen blassen Schimmer.
Gruß Katjuscha
Anzeige
AW: Makro läuft nicht
18.01.2017 16:19:02
Katjuscha
Hallo zusammen,
hat denn niemand eine Idee warum mein Makro nicht läuft oder wie ich es vereinfachen kann?
Hilfe!!!
AW: Makro läuft nicht
22.01.2017 00:02:32
onur
Teste das mal:
Sub testbook()
Dim strBookName As String
strBookName = "Mappe11.xlsm"'Hier Dateinamen eingeben
If BookOpen(strBookName) Then
MsgBox strBookName & " is open", vbOKOnly + vbInformation
Else
MsgBox strBookName & " is NOT open", vbOKOnly + vbExclamation
End If
End Sub
Dieses in ein MODUL:
Public Function BookOpen(strBookName As String) As Boolean
Dim oBk As Workbook
On Error Resume Next
Set oBk = Workbooks(strBookName)
On Error GoTo 0
If oBk Is Nothing Then
BookOpen = False
Else
BookOpen = True
End If
End Function

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Laufzeitfehler 91 in Excel VBA beheben


Schritt-für-Schritt-Anleitung

Um den Laufzeitfehler 91 in Excel VBA zu beheben, gehe wie folgt vor:

  1. Überprüfe die Objektvariablen: Stelle sicher, dass alle Objektvariablen korrekt gesetzt sind, bevor du sie verwendest. In deinem Fall sollte die Arbeitsmappe WB vor der Verwendung im With-Block gesetzt werden.

    Dim WB As Workbook
    Set WB = Workbooks.Open("G:\FF-Listen\HL_Gemarkungen.xls")
  2. Anpassung des With-Blocks: Ändere den With-Block in deinem Makro, um auf das geöffnete Workbook zuzugreifen:

    With WB.Worksheets(1)
  3. Dateipfad prüfen: Stelle sicher, dass die Datei tatsächlich vorhanden ist und der Pfad korrekt ist. Wenn die Datei nicht geöffnet ist, musst du sie zuerst öffnen.

  4. Makro testen: Führe das Makro aus, um sicherzustellen, dass der Fehler nicht mehr auftritt.


Häufige Fehler und Lösungen

  • Laufzeitfehler 91: Objektvariable oder With-Blockvariable nicht festgelegt: Dieser Fehler tritt auf, wenn du versuchst, auf ein Objekt zuzugreifen, das nicht gesetzt wurde. Überprüfe, ob du die Variable korrekt initialisiert hast.

  • Laufzeitfehler 9: Index außerhalb des gültigen Bereichs: Dieser Fehler tritt auf, wenn du auf eine Arbeitsmappe oder ein Arbeitsblatt zugreifen möchtest, das nicht existiert oder nicht geöffnet ist. Stelle sicher, dass du den richtigen Dateinamen ohne Pfad verwendest.


Alternative Methoden

Wenn du den Laufzeitfehler 91 weiterhin nicht beheben kannst, kannst du folgende Alternativen ausprobieren:

  • Verwende On Error Resume Next: Dies ignoriert Fehler, aber sei vorsichtig, da es auch das Debugging erschwert.

    On Error Resume Next
    Set WB = Workbooks("HL_Gemarkungen.xls")
    On Error GoTo 0
  • Erstelle eine Funktion zur Überprüfung, ob die Datei geöffnet ist: Nutze die Funktion BookOpen, um sicherzustellen, dass die Datei geöffnet ist, bevor du darauf zugreifst.

    Public Function BookOpen(strBookName As String) As Boolean
        Dim oBk As Workbook
        On Error Resume Next
        Set oBk = Workbooks(strBookName)
        On Error GoTo 0
        BookOpen = Not oBk Is Nothing
    End Function

Praktische Beispiele

Hier sind einige praktische Beispiele, die dir helfen, den Laufzeitfehler 91 in deinen VBA-Makros zu vermeiden:

Sub BeispielMakro()
    Dim WB As Workbook
    If Not BookOpen("HL_Gemarkungen.xls") Then
        Set WB = Workbooks.Open("G:\FF-Listen\HL_Gemarkungen.xls")
    Else
        Set WB = Workbooks("HL_Gemarkungen.xls")
    End If

    With WB.Worksheets(1)
        ' Dein Code hier
    End With
End Sub

Tipps für Profis

  • Nutze Option Explicit: Dies zwingt dich, alle Variablen zu deklarieren, was hilft, Fehler frühzeitig zu erkennen.
  • Verwende Debugging-Tools: Nutze den Debugger in VBA, um Zeile für Zeile durch dein Makro zu gehen und den Ort des Fehlers zu identifizieren.
  • Handhabe Fehler elegant: Implementiere eine Fehlerbehandlungsroutine, um die Benutzerfreundlichkeit deiner Makros zu erhöhen.

FAQ: Häufige Fragen

1. Was ist ein Laufzeitfehler 91? Ein Laufzeitfehler 91 tritt auf, wenn du versuchst, auf ein Objekt zuzugreifen, das nicht korrekt initialisiert wurde.

2. Wie kann ich sicherstellen, dass ein Workbook geöffnet ist? Du kannst eine Funktion schreiben, die überprüft, ob das Workbook bereits geöffnet ist, bevor du versuchst, darauf zuzugreifen.

3. Warum muss ich den Pfad nicht angeben, wenn ich eine geöffnete Arbeitsmappe referenziere? Geöffnete Excel-Dateien werden in VBA nur mit ihrem Dateinamen referenziert, da sie im Speicher sind und nicht mehr auf den Dateipfad zugreifen müssen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige