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

Forumthread: ThisWorkbook.Path

ThisWorkbook.Path
27.06.2015 10:05:30
Paul

Hallo,
ich habe Probleme mit einem Makro das ich geschrieben habe. Es erstellt aus meiner Dienstplantabelle heraus eine CSV-Datei. Nun möchte ich das diese Datei im gleichen Ordner wie die Ursprungsdatei gespeichert wird. Da die Dienstplatabelle einige Kollegen nutzen die die Tabelle an unterschiedlichen Orten und unter unterschiedlichen Namen speichern, kann ich dem Makro keine vordefinierten Daten liefern. Ich hatte nämlich einige Lösungen im Internet gefunden, welche sich aber entweder auf einen festen Pfad oder auf einen festen Tabellennamen beziehen. Nun brauche ich also einen Vorgang wodurch Excel sich den Pfad der aktiven Tabelle merkt bevor die neue Tabelle erstellt wird und ihn dann als Speicherort verwendet. Auch wenn das nicht soviel hilft habe ich mal das Makro beigefügt. Die Tabelle ist leider zu groß um sie hier hochzuladen.
Vielen Dank für eure Hilfe!
Paul.

Sub CSV()
Application.ScreenUpdating = False
ActiveWorkbook.Unprotect "123"
Sheets("Export").Select
Sheets("ExportCSV").Visible = True
Sheets("ExportCSV").Unprotect Password:="123"
Sheets("Data5").Visible = True
Sheets("Data5").Unprotect Password:="123"
Sheets("Data5").Select
Range(Sheets("Export").Range("S3")).Copy
Range("A1").Select
Sheets("ExportCSV").Select
Range("B2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWorkbook.Worksheets("ExportCSV").ListObjects("Tabelle2").Sort.SortFields. _
Clear
ActiveWorkbook.Worksheets("ExportCSV").ListObjects("Tabelle2").Sort.SortFields. _
Add Key:=Range("Tabelle2[[#All],[Start Date]]"), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("ExportCSV").ListObjects("Tabelle2").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Sheets("Data5").Visible = False
Sheets("ExportCSV").Select
Sheets("ExportCSV").Copy
ActiveWorkbook.Date1904 = True
ChDir ThisWorkbook.Path
ActiveWorkbook.SaveAs Filename:=Range("A2").Value, _
FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Save
ActiveWindow.Close
Sheets("ExportCSV").Select
Sheets("ExportCSV").Visible = False
Sheets("Export").Select
ActiveWorkbook.Protect Password:="123", _
Structure:=True, Windows:=False
Application.ScreenUpdating = True
End Sub

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ThisWorkbook.Path
27.06.2015 10:11:32
Hajo_Zi
benutze
ActiveWorkbook.Path
Du möchtest es ja vom Aktiven haben.

AW: ThisWorkbook.Path
27.06.2015 10:16:33
Paul
Aber sobald ich aus der alten eine neue Tabelle erstellt habe ist die ja dann die Aktive. Und ungespeicherte Mappen speichert Excel immer unter Eigene Dokumente ab. Sobald ich das Tabellenblatt kopiere (Sheets("ExportCSV").Copy) erstellt Excel eine neue Mappe, die ja dann aktiv ist...

Anzeige
AW: ThisWorkbook.Path
27.06.2015 10:28:32
RPP63
Hallo!
Probiere mal:
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Range("A2").Value,
FileFormat:=xlCSV, CreateBackup:=False
Gruß Ralf

AW: ThisWorkbook.Path
27.06.2015 10:49:02
Paul
Das funktioniert tatsächlich. Vielen Dank. Auch wenn ich nicht verstehe warum, schließlich ist
ChDir ThisWorkbook.Path
ActiveWorkbook.SaveAs Filename:=Range("A2").Value,

nichts anderes als
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Range("A2").Value,
...
Aber vielleicht muss man nicht alles verstehen. Solange es funktioniert!

Anzeige
Nicht nicht anders (manche sagen : doch anders)
27.06.2015 10:54:32
RPP63
Hi!
Bemerkst Du den Backslash in meiner Lösung? ;)
Gruß Ralf

AW: Nicht nicht anders (manche sagen : doch anders)
27.06.2015 11:07:47
Paul
Offenbar blicke ich nicht durch die Excel Logik. Active ist das was gerade geöffnet, angeklickt, im Vordergrund ist. Bezieht sich This dann nicht auch darauf? Naja klar, offenbar nicht. Ich hatte halt mit einer hoch komplizierten Lösung gerechnet, erst einen Pfad zu erkennen, ihn zu hinterlegen um ihn dann wieder nutzen zu können. Umso schöner wenn es einfach geht! :)

Anzeige
This
27.06.2015 11:19:48
RPP63
ThisWorkbook ist das WB, in dem der Code steht.
ActiveWorkbook das gerade aktive.
Gruß Ralf

AW: This
27.06.2015 11:24:26
Paul
Jetzt hab ichs. Mensch mit dem Wissen eröffnen sich ganz neue Möglichkeiten! Ich dachte Dir Ralf!

AW: This
27.06.2015 12:24:18
Ralf P.
Hallo Paul,
Da gibt es mehrere fallstricke.
Chdir schlägt fehl, wenn das aktive Drive ein anderes ist, bspw. D: statt c: oder gar ein netzlaufwerk.
Du musst chdrive und chdir genauso verwenden wie in der dos console. Also erst Laufwerk wechseln dann Verzeichnis.
Zudem ist activeworkbook.Path leer, solange die neue Datei ungespeichert ist.
Ergo: das sicherste ist, bei jeder Datei Operation den kompletten Pfad anzugeben.
Gruß
Ralf

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Dynamisches Speichern von CSV-Dateien in Excel mit ThisWorkbook.Path


Schritt-für-Schritt-Anleitung

Um eine CSV-Datei im gleichen Ordner wie die Ursprungsdatei zu speichern, kannst du die ThisWorkbook.Path-Eigenschaft nutzen. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den Visual Basic for Applications (VBA) Editor:

    • Drücke ALT + F11 in Excel.
  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf „VBAProject (deinWorkbookName)“ und wähle „Einfügen“ > „Modul“.
  3. Kopiere und füge den folgenden Code ein:

    Sub CSV()
       Application.ScreenUpdating = False
       ActiveWorkbook.Unprotect "123"
       Sheets("ExportCSV").Visible = True
       Sheets("ExportCSV").Unprotect Password:="123"
       Sheets("ExportCSV").Copy
       ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Range("A2").Value, _
                            FileFormat:=xlCSV, CreateBackup:=False
       ActiveWindow.Close
       Application.ScreenUpdating = True
    End Sub
  4. Speichere dein Makro:

    • Drücke CTRL + S und schließe den VBA-Editor.
  5. Führe das Makro aus:

    • Wechsle zurück zu Excel, gehe zu „Entwicklertools“ > „Makros“, wähle dein Makro aus und klicke auf „Ausführen“.

Häufige Fehler und Lösungen

  • Fehler: „ChDir schlägt fehl“
    Lösung: Achte darauf, dass das aktive Laufwerk korrekt ist. Wenn du von C: auf D: wechselst, musst du den ChDrive-Befehl verwenden, bevor du ChDir anwendest.

  • Fehler: „ActiveWorkbook.Path ist leer“
    Lösung: Dieser Fehler tritt auf, wenn die Datei ungespeichert ist. Stelle sicher, dass du den vollständigen Pfad angibst, bevor du die Datei speicherst.


Alternative Methoden

Wenn du eine andere Methode zur Speicherung der CSV-Datei ausprobieren möchtest, kannst du die Application.ActiveWorkbook.Path-Eigenschaft verwenden:

ActiveWorkbook.SaveAs Filename:=Application.ActiveWorkbook.Path & "\" & Range("A2").Value, _
                     FileFormat:=xlCSV, CreateBackup:=False

Diese Methode funktioniert ähnlich, aber verwendet den aktiven Arbeitsbuchpfad.


Praktische Beispiele

Hier sind einige Beispiele, wie du ThisWorkbook.Path in verschiedenen Szenarien verwenden kannst:

  1. Speichern einer Excel-Datei im gleichen Verzeichnis:

    ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\NeueDatei.xlsx"
  2. Kopieren einer Datei in einen bestimmten Ordner:

    FileCopy ThisWorkbook.Path & "\OriginalDatei.xlsx", ThisWorkbook.Path & "\KopieDatei.xlsx"

Tipps für Profis

  • Verwende ThisWorkbook für den aktuellen Code: Wenn dein Makro aus einem bestimmten Workbook ausgeführt wird, ist es ratsam, immer ThisWorkbook.Path zu verwenden, um Verwirrung mit ActiveWorkbook zu vermeiden.

  • Fehlerbehandlung einfügen: Implementiere eine Fehlerbehandlung, um unerwartete Fehler zu vermeiden. Zum Beispiel:

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

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen ThisWorkbook und ActiveWorkbook?
ThisWorkbook bezieht sich auf das Workbook, in dem der Code ausgeführt wird, während ActiveWorkbook auf das aktuell aktive Workbook verweist.

2. Warum muss ich einen Backslash verwenden?
Der Backslash (\) ist notwendig, um den vollständigen Pfad korrekt zu erstellen. Er trennt den Ordnernamen vom Dateinamen.

3. Was passiert, wenn ich versuche, eine ungespeicherte Arbeitsmappe zu speichern?
Wenn du versuchst, eine ungespeicherte Arbeitsmappe zu speichern, wird der Path leer sein. Stelle sicher, dass die Datei vorher gespeichert wird, um den Pfad korrekt zu verwenden.

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