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

Forumthread: Relative Pfade in Makros

Relative Pfade in Makros
04.10.2005 09:55:09
Ulf
Hallo,
ich hab mal wieder ein Problem, was wohl mal wieder gar keins ist...
Ich möchte in den Makros relative Pfade angeben können, um die Datei auf mehreren PCs laufen lassen zu können. Wie bekomme ich das hin?
Beispielcode:

Sub Speichern()
Dim dateiname As Variant
Dim fs As Variant
Range("F8:K26").Select
Selection.Copy
Range("A1").Select
Workbooks.Add
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.Worksheets(1).Activate
ChDrive "d:\"
ChDir "d:\Beispiel\Für\Absoluter\Pfad\"
dateiname = Application.GetSaveAsFilename _
("", "Micrsoft Excel-Dateien (*.xls),*.xls")
If dateiname = False Then Exit Sub
Sheets(1).Cells(23, 1) = dateiname
ActiveWorkbook.SaveAs Filename:=dateiname
ActiveWindow.Close
End Sub

Die Datei, in der das Makro steckt, befindet sich auf der Ebene d:\Beispiel\Für\Absoluter\
Vielen Dank,
Ulf
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Relative Pfade in Makros
04.10.2005 09:57:20
Matthias
Hallo Ulf,
den Pfad der Codemapee erhältst du mit
ThisWorkbook.Path
Gruß Matthias
AW: Relative Pfade in Makros
04.10.2005 10:34:30
Erich
Hallo Ulf,
es kommt auch sehr darauf an, zu welchem Pfad ein anderer Pfad relativ sein soll. Eine Möglichkeit hat Matthias schon gepostet. In folgendem Code sind noch ein paar mehr:

Sub RelVerz()
Dim strPfad As String, strRelPfad As String
'                                  Akt. Verz. - alte Funktion
strPfad = CurDir()
'                                  Akt. Verz. - mit FSO
Dim objFso As Object
Set objFso = CreateObject("Scripting.FileSystemObject")
strPfad = objFso.getfolder(".")
'                                  Verz. dieser Mappe (gespeichert!)
strPfad = ThisWorkbook.Path
'                                  Verz. der aktuellen Mappe (gespeichert!)
strPfad = ActiveWorkbook.Path
'                                  Verz. der Mappe "xyz.xls" (gespeichert!)
strPfad = Workbooks("xyz.xls").Path
'  ------------------------------- Unterverzeichnis des akt. Verzeichnisses
strRelPfad = strPfad & "\abc\"
End Sub

Am Ende steht auch noch als Beispiel für einen "relativen Pfad" ein Unterverzeichnis. Auch da gibts natürlich etliche Möglichkeiten, etwa ü+bergeordnete Verzeichnisse.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Relative Pfade in Makros
04.10.2005 10:50:18
Ulf
ähhh, jetzt bin ich etwas verwirrt.
Also, Hintergrund ist ja, dass ich die Makros auf verschiedenen PCs einzetzen können möchte, ohne dazu zuerst die Pfade in den Makros anzupassen.
Die Dateien und Ordner, auf die die Makros verweisen, sind alle in Unterordern des Ordners, den ich auf die anderen PCs kopiere.
Welche Methode sollte ich nun anwenden und wie würde dass dann aussehen?
Die Möglichkeit von Matthias war bestimmt gut, nur kann ich sie mangels VBA-Kenntnisse nicht anwenden...
Gruß Ulf
Anzeige
AW: Relative Pfade in Makros
04.10.2005 11:16:51
Erich
Hallo Ulf,
woran kann VBA erkennen, in welchen Ordner auf einem anderen PC die Dateien kopiert wurden?
Gibt es eine (geöffnete?) Mappe, die in dem Ausgangsordner liegt? Dann kannst du diese Mappe anstelle von "xyz.xls" in meinem Code verwenden, also das letzte Beispiel vor dem Anhängen des Unterordners.
Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Relative Pfade in Makros
04.10.2005 11:21:41
Ulf
Ja, die Makros werden aus einer Exceldatei aufgerufen, die in dem Ausgangsordner liegt.
AW: Relative Pfade in Makros
04.10.2005 11:21:52
Ulf
Ja, die Makros werden aus einer Exceldatei aufgerufen, die in dem Ausgangsordner liegt.
AW: Relative Pfade in Makros
04.10.2005 11:28:36
Erich
Hallo Ulf,
da hilft auch schon mal ein Blick in die Recherche:
https://www.herber.de/forum/archiv/156to160/t156563.htm
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Relative Pfade in Makros
04.10.2005 11:22:02
Erich
Hallo Ulf,
"relativ" einfach wäre es, wenn die Mappe, in der dein Code steht, in dem "Oberverzeichnis" steht. Dann kannst du auf ein Unterverzeichnis mit
strRelPfad = ThisWorkbook.Path & "\abc"
auf das Unterverzeichnis abc verweisen - Darauf lief sicher auch Matthias' Vorschlag hinaus.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Relative Pfade in Makros
04.10.2005 11:31:52
Ulf
Ja genau, den Thread hatte ich auch schon gesehen, bloß wie würde dann mein Beispielcode aussehen?
Ich wechsel bisher ja mit den Befehlen
ChDrive "d:\"
ChDir "d:\Beispiel\Für\Absoluter\Pfad\"
in das richtige Verzeichnis.
Der kopierte Ordner hieße dann "Absoluter", der Ordner, auf den verweist werden soll, heißt "Pfad" als Unterordner von "Absoluter".
Gruß Ulf
Anzeige
AW: Relative Pfade in Makros
04.10.2005 13:33:07
Erich
Hallo Ulf,
du kannst z. B. schreiben:
ChDrive ThisWorkbook.Path
ChDir ThisWorkbook.Path & "\Pfad\"
Bei ChDrive wird nur das erste Zeichen (z. B. "d") für das Laufwerk verarbeitet. Es stört aber nicht, wenn da ein kompletter Pfad steht.
Grüße von Erich aus Kamp-Lintfort
AW: Relative Pfade in Makros
04.10.2005 13:35:41
Ulf
Ja prima,
vielen Dank!
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Relative Pfade in Excel Makros nutzen


Schritt-für-Schritt-Anleitung

Um in Excel VBA mit relativen Pfaden zu arbeiten, kannst du folgende Schritte befolgen:

  1. Öffne dein Excel-Dokument und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Erstelle ein neues Modul: Rechtsklick auf "VBAProject (dein Dokument)", wähle "Einfügen" und dann "Modul".

  3. Füge folgenden Beispielcode ein:

    Sub BeispielRelativerPfad()
       Dim strRelPfad As String
       ' Setze den relativen Pfad
       strRelPfad = ThisWorkbook.Path & "\Pfad\"
       ' Hier kannst du deinen Code weiterführen
       MsgBox "Der relative Pfad ist: " & strRelPfad
    End Sub
  4. Speichere das Makro und schließe den VBA-Editor.

  5. Führe das Makro aus: Gehe zurück zu Excel, drücke ALT + F8, wähle "BeispielRelativerPfad" und klicke auf "Ausführen".

Mit dieser Schritt-für-Schritt-Anleitung kannst du jetzt einen relativen Pfad in deinem Excel Makro verwenden.


Häufige Fehler und Lösungen

  • Fehler: "Datei nicht gefunden"

    • Lösung: Überprüfe, ob der relative Pfad korrekt ist. Stelle sicher, dass die Datei im angegebenen Unterverzeichnis vorhanden ist.
  • Fehler: Makro kann nicht ausgeführt werden

    • Lösung: Stelle sicher, dass Makros in Excel aktiviert sind. Gehe zu "Datei" > "Optionen" > "Trust Center" > "Einstellungen für das Trust Center" > "Makroeinstellungen".

Alternative Methoden

Es gibt verschiedene Möglichkeiten, relative Pfade in Excel VBA zu verwenden:

  • Verwendung von CurDir: Mit CurDir kannst du das aktuelle Verzeichnis abfragen und darauf basierend relative Pfade erstellen.

  • FileSystemObject: Mit CreateObject("Scripting.FileSystemObject") kannst du komplexe Dateisystemoperationen durchführen und relativ auf Verzeichnisse zugreifen.

Ein Beispiel:

Sub VerzeichnisBeispiel()
   Dim fso As Object
   Set fso = CreateObject("Scripting.FileSystemObject")
   MsgBox fso.GetAbsolutePathName(".") & "\Pfad\"
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele für die Verwendung eines relativen Pfades in Excel VBA:

  1. Speichern einer Datei im Unterverzeichnis:

    Sub SpeichernImUnterordner()
       Dim strPfad As String
       strPfad = ThisWorkbook.Path & "\Unterordner\Datei.xlsx"
       ActiveWorkbook.SaveAs Filename:=strPfad
    End Sub
  2. Öffnen einer Datei im Unterverzeichnis:

    Sub DateiOeffnen()
       Dim strPfad As String
       strPfad = ThisWorkbook.Path & "\Unterordner\Datei.xlsx"
       Workbooks.Open Filename:=strPfad
    End Sub

Tipps für Profis

  • Verwende ThisWorkbook.Path: So kannst du den Pfad der aktuell geöffneten Arbeitsmappe dynamisch abrufen und in deinen Makros nutzen.

  • Vermeide feste Pfade: Nutze immer relative Pfade, wenn du sicherstellen möchtest, dass dein Excel Makro auf verschiedenen PCs funktioniert.

  • Testen auf verschiedenen Systemen: Teste deine Makros auf verschiedenen PCs, um sicherzustellen, dass der relative Pfad immer korrekt interpretiert wird.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen absolutem und relativem Pfad?
Ein absoluter Pfad gibt den vollständigen Speicherort der Datei an, während ein relativer Pfad auf die Position einer Datei relativ zu einem anderen Verzeichnis verweist.

2. Wie kann ich sicherstellen, dass mein Makro auf verschiedenen PCs funktioniert?
Indem du relative Pfade verwendest, kannst du sicherstellen, dass dein Makro auf jedem PC funktioniert, solange die Verzeichnisstruktur gleich bleibt.

3. Welche Excel-Versionen unterstützen relative Pfade in VBA?
Relative Pfade sind in allen modernen Excel-Versionen verfügbar, die VBA unterstützen, einschließlich Excel 2010, 2013, 2016, 2019 und Microsoft 365.

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