ThisWorkbook.Path

Bild

Betrifft: ThisWorkbook.Path
von: Paul
Geschrieben am: 27.06.2015 10:05:30

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

Bild

Betrifft: AW: ThisWorkbook.Path
von: Hajo_Zi
Geschrieben am: 27.06.2015 10:11:32
benutze
ActiveWorkbook.Path
Du möchtest es ja vom Aktiven haben.


Bild

Betrifft: AW: ThisWorkbook.Path
von: Paul
Geschrieben am: 27.06.2015 10:16:33
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...

Bild

Betrifft: AW: ThisWorkbook.Path
von: RPP63
Geschrieben am: 27.06.2015 10:28:32
Hallo!
Probiere mal:

ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Range("A2").Value, 
    FileFormat:=xlCSV, CreateBackup:=False
Gruß Ralf

Bild

Betrifft: AW: ThisWorkbook.Path
von: Paul
Geschrieben am: 27.06.2015 10:49:02
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!

Bild

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

Bild

Betrifft: AW: Nicht nicht anders (manche sagen : doch anders)
von: Paul
Geschrieben am: 27.06.2015 11:07:47
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! :)

Bild

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

Bild

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

Bild

Betrifft: AW: This
von: Ralf P.
Geschrieben am: 27.06.2015 12:24:18
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

 Bild

Beiträge aus den Excel-Beispielen zum Thema "ListBox"