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

Forumthread: Laufzeitfehler 9 bei Workbooks("Hilfsdatei").Close

Laufzeitfehler 9 bei Workbooks("Hilfsdatei").Close
25.10.2018 09:04:46
Kurt
Hallo liebe Spezialisten!
Ich möchte euch bitte um Rat fragen.
In meinem VBA Code speichere ich eine Datei unter einem definiertem Pfad unter dem Namen "Hilfsdatei".
Der Auszug des Codes sieht so aus:
Option Explicit
Public Speicher_Pfad_Hilfsdatei As String
_____________________________________________________
Speicher_Pfad_Hilfsdatei = "X:\meinPfad\Hilfsdatei"
ActiveWorkbook.SaveAs Speicher_Pfad_Hilfsdatei, FileFormat:=51
Auf dieses File kann dann nämlich eine andere Software zugreifen.
Das funktioniert!
Diese Hilfsdatei soll aber nicht geöffnet bleiben, deshalb schließe ich sie mit
Workbooks("Hilfsdatei").Close SaveChanges:=True
Auf meinem PC funktioniert das auch, aber wenn ich das Makro auf einem anderen Rechner laufen lasse, bekomme ich Laufzeitfehler 9.
Es sein noch erklärt, dass der Speicherpfad ein Netzlaufwerk ist, auf den alle User (Voll-) Zugriff haben.
Ich habe schon herausgefunden dass das der Laufzeitfehler 9 bedeutet, dass das Objekt nicht gefunden wird.
Bei meinem PC wird es aber offensichtlich schon gefunden.
Die Debugging Option zeigt, dass das Problem exakt bei der Zeile "Workbooks("Hilfsdatei").Close" auftritt.
Auch ein Voranstellen von
Workbooks("Hilfsdatei").Activate
bringt keine Besserung - dann ist eben schon diese Zeile gelb markiert.
Hat jemand eine Idee woran es liegen könnte, dass das Makro auf einem PC funktioniert, und am anderen nicht?
Vielen Dank vorab für eure Zeit und Expertise! :-)
Kurt
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 9 bei Workbooks("Hilfsdatei").Close
25.10.2018 09:13:02
Hajo_Zi
Hallo Kurt,
zeichne das speichern unter mal mit dem Makrorecorder auf.

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
AW: Laufzeitfehler 9 bei Workbooks("Hilfsdatei").Close
25.10.2018 09:20:24
Kurt
ok, hab ich gemacht.
was jetzt? :-)
das speichern ist ja auch gar nicht das problem, sondern das schließen.
ich versteh den ansatz nicht...!
nebenbei: die genaue fehlermeldung lautet:
Laufzeitfehler 9
Index außerhalb des gültigen Bereichs
Anzeige
AW: Laufzeitfehler 9 bei Workbooks("Hilfsdatei").Close
25.10.2018 09:19:49
Daniel
HI
Die unterschiedlichen Verhaltensweisen könnten an der Einstellung im Explorer liegen, ob die Dateiendung mit angezeigt werden soll oder nicht.
Wenn du die Dateiendung nicht anzeigen lässt, brauchst du sie auch in Excel nicht angeben, wenn du das Workbook ansprichst.
Haben deine Kollegen diese Einstellung nicht aktiviert, so müssten sie auf ihrem Rechner die Datei mit der Endung ansprechen (Workbooks("Hilfsdatei.xlsx").Activate
wenn du die Datei schon vorher mit ActiveWorkbook.SaveAs gespeichert hast, dann kannst du sie auch mit ActiveWorkbook.Close schließen, ohne den Namen verwenden zu müssen.
Gruß Daniel
Anzeige
AW: Laufzeitfehler 9 bei Workbooks("Hilfsdatei").Close
25.10.2018 09:52:56
Kurt
vielen dank daniel für die erklärung!
das ist es!
ich umgehe das problem jetzt wie folgt:
If Dir("Hilfsdatei") "" Then
Workbooks("Hilfsdatei").Close SaveChanges:=True
Else
Workbooks("Hilfsdatei.xlsx").Close SaveChanges:=True
End If
denkst du das ist eine gute lösung, oder denke ich da zu kompliziert?
herzlichen dank nochmals!
Anzeige
AW: Laufzeitfehler 9 bei Workbooks("Hilfsdatei").Close
25.10.2018 10:00:55
Hajo_Zi
habe ich es also richtig gesehen das es am Speichern liegt. Du speicherst die Datei ohne Dateityp.
Gruß Hajo
AW: Laufzeitfehler 9 bei Workbooks("Hilfsdatei").Close
25.10.2018 10:04:57
Daniel
Hi
naja, kann man machen.
ich würde versuchen, in der Programmierung ohne den Dateinamen auszukommen.
eine Möglichkeit hatte ich dir ja gezeigt.
Wenn du die Hilfsdatei mit ActiveWorkbook.SaveAs speichern kannst, kannst du sie auch mit ActiveWorkbook.close direkt danach schließen (außer du aktivierst zwischendrin ein anderes Workbook)
ansonsten würde ich, wenn du die Mappe erzeugst, diese gleich einer Variablen zuweisen und dann diese Variable verwenden, wenn du diese Mappe ansprechen willst:
dim wbHilfe as Workbook
set wbHilfe = Workbooks.Add
... hier der Code zum Befüllen der Datei
wbHilfe.SaveAs ...
wbHilfe.Close
Gruß Daniel
Anzeige
AW: Laufzeitfehler 9 bei Workbooks("Hilfsdatei").Close
25.10.2018 10:49:18
Kurt
Danke für eure Rückmeldungen!
@Hajo_Zi: der Dateityp ist doch durch "FileFormat:=51" definiert!? verstehe ich das was falsch?
@Daniel: "Workbooks.Add" ist vielleicht nicht die richtige wahl für mich. :-/
hintergrund: meine datei ist eine xltm, die andere software kann aber nur mit xlsx arbeiten.
also mache ich eine "kopie" ihrer selbst ohne makros, und schließe sie dann. mit "Workbooks.Add" bekomme ich eine neue, leere datei.
und ja, ich aktiviere zwischendurch leider ein anderes workbook um hier daten rein zu schreiben.
sorry falls ich hier am schlauch stehe!
Anzeige
AW: Laufzeitfehler 9 bei Workbooks("Hilfsdatei").Close
25.10.2018 11:12:56
Daniel
hi
klar du hast mir ja auch noch nicht erzählt, wie du die Datei erstellt.
sollte dir nur zeigen, dass es sinnvoll ist, das Workbook möglichst früh einer Variablen zuzuweisen und dann die Variable zu verwenden.
wenn es sich um die Datei handelt, die auch das makro enthält, kannst du auch ThisWorkbook verwenden.
und weiterhin gilt:
wenn du mit ActiveWorkbook.SaveAs die richtige Datei speicherst, dann sollte ActiveWorkbook.Close auch die richtige Datei schließen, außer du wechselst zwischendrin nochmal das ActiveWorkbook.
aber auch dann könntest du eben kurz vor dem Speichern das ActiveWorkbook einer Variabeln zusweisen, um dann diese zum Schleißen der Datei einzusetzen.
Gruß Daniel
E
Anzeige
AW: Laufzeitfehler 9 bei Workbooks("Hilfsdatei").Close
25.10.2018 12:31:44
Kurt
JUHU! :-)
danke für die tollen tipps!
ich hab sie wie folgt umgesetzt (falls das mal jemand liest und es braucht):
Dim wbHilfe As Workbook
Set wbHilfe = ThisWorkbook
wbHilfe.SaveAs Hilfsdatei, FileFormat:=51 'xlsx
... 'Code um Daten in weitere Datei zu überschreiben
wbHilfe.Close
VIELEN DANK!
Anzeige
in dem Fall kannst du dir die Variable auch sparen
26.10.2018 09:53:12
Daniel
du kannst die Datei, die das Makro enthält, immer über THISWORKBOOK ansprechen.
wenn die Bezeichnung "wbHilfe" den Code jedoch übersichtlicher macht, dann kannst du natürlich auch die Variable behalten.
Gruß Daniel
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Laufzeitfehler 9 in Excel VBA beheben


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Modul erstellen: Erstelle ein neues Modul über Einfügen > Modul.
  3. Code einfügen:

    Option Explicit
    Public Speicher_Pfad_Hilfsdatei As String
    
    Sub SpeichernUndSchließen()
       Speicher_Pfad_Hilfsdatei = "X:\meinPfad\Hilfsdatei.xlsx"
       ActiveWorkbook.SaveAs Speicher_Pfad_Hilfsdatei, FileFormat:=51
       If Dir("Hilfsdatei.xlsx") <> "" Then
           Workbooks("Hilfsdatei.xlsx").Close SaveChanges:=True
       Else
           Workbooks("Hilfsdatei").Close SaveChanges:=True
       End If
    End Sub
  4. Makro ausführen: Führe das Makro aus, um die Datei zu speichern und zu schließen.
  5. Fehlerbehandlung: Überprüfe, ob der Laufzeitfehler 9 auftritt, und passe den Code entsprechend an.

Häufige Fehler und Lösungen

  • Laufzeitfehler 9: Dieser Fehler tritt auf, wenn das angegebene Workbook nicht gefunden wird. Stelle sicher, dass der Name des Workbooks korrekt ist und die Dateiendung (z. B. .xlsx) berücksichtigt wird.
  • Datei nicht gefunden: Wenn das Makro auf einem anderen PC ausgeführt wird, überprüfe, ob die Datei tatsächlich im angegebenen Pfad vorhanden ist.
  • Unterschiedliche Dateieinstellungen: Die Anzeige von Dateiendungen im Explorer kann Einfluss auf den Code haben. Bei deaktivierter Anzeige muss die Endung im Code nicht angegeben werden.

Alternative Methoden

  • ActiveWorkbook verwenden: Wenn du die Datei mit ActiveWorkbook.SaveAs speicherst, kannst du sie direkt mit ActiveWorkbook.Close schließen, anstatt den Namen anzugeben.
  • Variable für Workbook: Weise das Workbook einer Variablen zu, um es später einfacher zu referenzieren:
    Dim wbHilfe As Workbook
    Set wbHilfe = ActiveWorkbook
    wbHilfe.Close SaveChanges:=True

Praktische Beispiele

  1. Einfaches Beispiel:

    Sub Beispiel1()
       Dim wb As Workbook
       Set wb = Workbooks.Add
       wb.SaveAs "C:\Temp\Beispiel.xlsx"
       wb.Close
    End Sub
  2. Komplexeres Beispiel:

    Sub Beispiel2()
       Dim wbHilfe As Workbook
       Set wbHilfe = ThisWorkbook ' Bezieht sich auf die Datei mit dem Makro
       wbHilfe.SaveAs "X:\meinPfad\Hilfsdatei.xlsx", FileFormat:=51
       wbHilfe.Close
    End Sub

Tipps für Profis

  • Verwendung von ThisWorkbook: Nutze ThisWorkbook, um auf die Arbeitsmappe zuzugreifen, in der das Makro ausgeführt wird.
  • Eindeutige Benennung: Stelle sicher, dass alle Dateinamen konsistent und eindeutig sind, um Verwechslungen zu vermeiden.
  • Debugging: Verwende Debug.Print oder MsgBox, um Werte während der Ausführung zu überprüfen und Laufzeitfehler besser zu verstehen.

FAQ: Häufige Fragen

1. Was bedeutet Laufzeitfehler 9?
Laufzeitfehler 9 tritt auf, wenn ein Objekt, wie ein Workbook, nicht gefunden werden kann. Das kann an einem falschen Namen oder einer nicht vorhandenen Datei liegen.

2. Wie kann ich Laufzeitfehler 9 in meinem VBA-Code vermeiden?
Achte darauf, den Dateinamen mit der richtigen Endung zu verwenden und prüfe, ob die Datei existiert, bevor du versuchst, sie zu schließen. Verwende auch ActiveWorkbook, wenn du sicherstellen möchtest, dass du das richtige Workbook schließt.

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