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

Ordnerpfad ersetzen: ThisWorkbook.Path

Forumthread: Ordnerpfad ersetzen: ThisWorkbook.Path

Ordnerpfad ersetzen: ThisWorkbook.Path
Alex
Hallo Leute,
Ich habe ein Problem bei der Verwendung ThisWorkbook.Path in meinem Code.
Die Datei „DSA.xls“ bezieht Daten aus der Datei „Mannschaft_1.xls“ per VBA-VLookup.
Beide Dateien befinden sich in der gleichen Ordnerstruktur bis zum Ordner „Training“.
Dann sind sie jeweils in anderen Ordnern jedoch auf der gleichen Ebene wie die andere Datei.
Ablageort der Datei Mannschaft_1.xls: 'C:\Ablage\Training\Daten\[Mannschaft_1.xls]Tabelle1'!
Ablageort der Datei DSA (bezieht von Mannschaft_1.xls Daten per VLookup): 'C:\Ablage\Training\Sport\[DSA.xls]Leistungen DSA'!
Da sich der Ordner “Ablage“ wechselnd auf verschiedenen Festplatten/Partitionen befindet und sich damit die Bezeichnung des Ordnerpfades (beispielsweise von C: nach F:) versuche ich nun
den gemeinsamen Teil des Pfades für beide Dateien ('C:\Ablage\Training\) mit „ThisWorkbook.Path“ zu ersetzen.
Alter Code (der Datei DSA.xls):
Private Sub Workbook_Open()
ActiveSheet.Unprotect
Range("A1").Value = Application.UserName
With Range("B1")
.Formula = "=VLookup(" & Range("A1") & "," & _
"'C:\Ablage\Training\Daten\[Mannschaft_1.xls]Tabelle1'!K5:N200, 4, False)"
.Formula = .Value
End With
Range("D5").CurrentRegion.AutoFilter _
Field:=1, Criteria1:=Range("B1").Value, Operator:=xlAnd
ActiveSheet.Protect , userinterfaceonly:=True
ActiveSheet.EnableAutoFilter = False
End Sub
Neuer (nicht funktionierender) Code:
Private Sub Workbook_Open()
ActiveSheet.Unprotect
Range("A1").Value = Application.UserName
With Range("B1")
.Formula = "=VLookup(" & Range("A1") & "," & _
ThisWorkbook.Path &  "'\Daten\[Mannschaft_1.xls]Tabelle1'!K5:N200, 4, False)"
.Formula = .Value
End With
Range("D5").CurrentRegion.AutoFilter _
Field:=1, Criteria1:=Range("B1").Value, Operator:=xlAnd
ActiveSheet.Protect , userinterfaceonly:=True
ActiveSheet.EnableAutoFilter = False
End Sub
Kann jemand helfen?
Grüße
Alex
Anzeige
AW: Ordnerpfad ersetzen: ThisWorkbook.Path
01.04.2012 14:38:32
Hajo_Zi
Hallo Alex,
ich hätte vermutet Du mußt mit Left und Instr arbeiten da Du ja nur einen Teil des Ordners haben willst bis Training.
Gruß Hajo
AW: Alles was hilft ist mir recht...
01.04.2012 15:01:52
Alex
aber das Problem mÜsste mit VBA gelöst werden, denn dies ist nur ein kleiner Auszug meines Datei-Wirrwarrs...
Grüsse
Alex
Anzeige
AW: Alles was hilft ist mir recht...
01.04.2012 15:06:28
Hajo_Zi
Hallo Axel,
Left und Instr ist VBA.
Option Explicit
Sub Makro1()
Dim StPfad As String
StPfad = "'C:\Ablage\Training\Daten\"
StPfad = Left(StPfad, InStr(StPfad, "Training") + 8)
End Sub
Gruß Hajo
Anzeige
AW: Upps, o.k, VBA bescheiden eben...
01.04.2012 15:36:32
Alex
...danke HaJo, nur hab ich wie ich sehe dann auch wieder den Ordnerpfad in den Makros zu ändern, wenn auch nicht so viele pro Code. Aber bei Wechsel von C: auf F: muss ich auch hier abändern - richtig?
Grüße
Alex
AW: Upps, o.k, VBA bescheiden eben...
01.04.2012 15:39:07
Hajo_Zi
Hallo Alex,
warum? Du benutzt doch ThisWorkbook.Path und da ist meiner Meinung nach der laufwerksbuchstabe enthalten.
Gruß Hajo
Anzeige
AW: Ordnerpfad ersetzen: ThisWorkbook.Path
01.04.2012 16:42:12
Josef

Hallo Alex,
Private Sub Workbook_Open()
  Dim strPath As String, strSearch As String
  
  strSearch = "Training"
  strPath = Me.Path
  strPath = Left(strPath, InStr(1, strPath, strSearch) + Len(strSearch))
  
  With ActiveSheet
    .Unprotect
    .Range("A1").Value = Application.UserName
    With .Range("B1")
      .Formula = "=VLookup(" & .Range("A1") & ",'" & _
        strPath & "\Daten\[Mannschaft_1.xls]Tabelle1'!K5:N200, 4, False)"
      .Value = .Value
    End With
    .Range("D5").CurrentRegion.AutoFilter _
      Field:=1, Criteria1:=.Range("B1").Value, Operator:=xlAnd
    .Protect , userinterfaceonly:=True
    .EnableAutoFilter = False
  End With
End Sub



« Gruß Sepp »

Anzeige
AW: ich bin zu blöde...
01.04.2012 21:04:40
Alex
Meiner mit DSA.xls eine Ebene höher in „Training“, bezieht Daten von „Daten/Mannschaft_1.xls“ (eine Ebene tiefer – anderer Ordner )
Das funktioniert:
Private Sub Workbook_Open()
Dim strPath As String
strSearch = "Training"
strPath = ThisWorkbook.Path
ActiveSheet.Unprotect
Range("A1").Value = Application.UserName
With Range("B1")
.Formula = "=VLookup(" & Range("A1") & "," & _
"'" & strPath & "\Daten\[Mannschaft_1.xls]Tabelle1'!K5:N200, 4, False)"
.Formula = .Value
End With
Range("D5").CurrentRegion.AutoFilter _
Field:=1, Criteria1:=Range("B1").Value, Operator:=xlAnd
ActiveSheet.Protect , userinterfaceonly:=True
ActiveSheet.EnableAutoFilter = False
End Sub
Irgendetwas haut mit der Sache nicht hin, wenn DSA.xls nicht eine Ebene höher liegt als „Mannschaft_1“.
Ergibt bei beiden Codes Fehlermeldungen.
Sepp seiner:
Private Sub Workbook_Open()
Dim strPath As String, strSearch As String
strSearch = "Training"
strPath = Me.Path
strPath = Left(strPath, InStr(1, strPath, strSearch) + Len(strSearch))
ActiveSheet.Unprotect
Range("A1").Value = Application.UserName
With Range("B1")
.Formula = "=VLookup(" & Range("A1") & "," & _
"'" & strPath & "\Daten\[Mannschaft_1.xls]Tabelle1'!K5:N200, 4, False)"
.Formula = .Value
End With
Range("D5").CurrentRegion.AutoFilter _
Field:=1, Criteria1:=Range("B1").Value, Operator:=xlAnd
ActiveSheet.Protect , userinterfaceonly:=True
ActiveSheet.EnableAutoFilter = False
End Sub
Die zweite strPath – Zeile kapier ich überhaupt nicht – kannst du mir die erklären?
Bei Dir HaJo verstehe ich die +8 nicht. Eigentlich auch die komplette Zeile nicht 
Option Explicit
Sub Makro1()
Dim StPfad As String
StPfad = ThisWorkbook.Path
StPfad = Left(StPfad, InStr(StPfad, "Training") + 8)
End Sub Danke ihr Beiden
Gruß
Alex
Anzeige
AW: Ordnerpfad ersetzen: ThisWorkbook.Path
01.04.2012 21:09:51
Josef

Hallo Alex,
Left und InStr kannst du in der Hilfe nachlesen.
Ein \ war noch zuviel.
Private Sub Workbook_Open()
  Dim strPath As String, strSearch As String
  
  strSearch = "Training"
  strPath = "C:\Ablage\Training\Daten" 'Me.Path
  strPath = Left(strPath, InStr(1, strPath, strSearch) + Len(strSearch))
  
  With ActiveSheet
    .Unprotect
    .Range("A1").Value = Application.UserName
    With .Range("B1")
      .Formula = "=VLookup(" & .Range("A1") & ",'" & _
        strPath & "Daten\[Mannschaft_1.xls]Tabelle1'!K5:N200, 4, False)"
      .Value = .Value
    End With
    .Range("D5").CurrentRegion.AutoFilter _
      Field:=1, Criteria1:=.Range("B1").Value, Operator:=xlAnd
    .Protect , userinterfaceonly:=True
    .EnableAutoFilter = False
  End With
End Sub



« Gruß Sepp »

Anzeige
AW: Danke an HaJo und Sepp - erledigt
01.04.2012 21:39:31
Alex
Hallo Sepp,
genau das "\" zuviel war es anscheinend. Kleinigkeit mit großer Wirkung... ich dreh noch mal durch!
Danke an Euch beide nochmal.
Grüße
Alex
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Ordnerpfad ersetzen mit ThisWorkbook.Path in VBA


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf dein Projekt, wähle Einfügen und dann Modul.

  3. Verwende ThisWorkbook.Path: Um den Pfad der Datei dynamisch zu erhalten, kannst du ThisWorkbook.Path verwenden. Dies gibt den Pfad der Arbeitsmappe zurück, in der der Code ausgeführt wird.

    Beispielcode:

    Private Sub Workbook_Open()
       Dim strPath As String
       strPath = ThisWorkbook.Path
       ' Weiterer Code hier
    End Sub
  4. Integriere den Pfad in Formeln: Ersetze statische Pfade in deinen Formeln durch strPath.

    Beispiel:

    .Formula = "=VLookup(" & Range("A1") & ", '" & strPath & "\Daten\[Mannschaft_1.xls]Tabelle1'!K5:N200, 4, False)"

Häufige Fehler und Lösungen

  • Fehler: "thisworkbook.path not working"

    • Lösung: Stelle sicher, dass du ThisWorkbook.Path korrekt verwendest. Achte darauf, dass du den richtigen Dateipfad und die Formatierung in deinen VBA-Codes verwendest.
  • Eingefügte Backslashes

    • Problem: Ein zusätzliches \ kann dazu führen, dass die Formel nicht korrekt funktioniert.
    • Lösung: Stelle sicher, dass der Backslash am Ende des Pfades richtig positioniert ist oder entfernt wird, wenn er nicht benötigt wird.

Alternative Methoden

  • Verwendung von Application.ActiveWorkbook.Path: Wenn du den Pfad der gerade aktiven Arbeitsmappe benötigst, kannst du diese Methode verwenden.

  • Verwendung von ChDir: Mit ChDir ThisWorkbook.Path kannst du das aktuelle Verzeichnis ändern, was nützlich sein kann, wenn du mehrere Dateien im gleichen Ordner verwalten möchtest.

ChDir ThisWorkbook.Path

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du ThisWorkbook.Path in deinem Code verwenden kannst:

  1. Zugriff auf eine andere Datei im gleichen Pfad:

    Dim strPath As String
    strPath = ThisWorkbook.Path
    ActiveSheet.Range("B1").Formula = "=VLookup(" & Range("A1") & ", '" & strPath & "\Daten\[Mannschaft_1.xls]Tabelle1'!K5:N200, 4, False)"
  2. Dynamische Pfadänderung: Wenn sich der Ordner auf verschiedenen Laufwerken befindet, ist die Verwendung von ThisWorkbook.Path hilfreich, da du den Pfad nicht manuell anpassen musst.


Tipps für Profis

  • Verwende Option Explicit: Damit stellst du sicher, dass alle Variablen deklariert sind, was die Fehlersuche erleichtert.
  • Fehlerbehandlung implementieren: Nutze On Error Resume Next oder spezifische Fehlerbehandlungsroutinen, um Probleme beim Zugriff auf Dateien zu erkennen und angemessen zu reagieren.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen ThisWorkbook.Path und Application.ActiveWorkbook.Path? ThisWorkbook.Path gibt den Pfad der Arbeitsmappe zurück, in der der Code läuft, während Application.ActiveWorkbook.Path den Pfad der aktuell aktiven Arbeitsmappe zurückgibt.

2. Warum funktioniert mein VLookup nicht, wenn ich ThisWorkbook.Path verwende? Überprüfe, ob du den Pfad korrekt in die Formel integriert hast. Achte besonders auf falsche oder überflüssige Backslashes.

3. Kann ich ThisWorkbook.Path in Formeln innerhalb von Excel verwenden? Nein, ThisWorkbook.Path ist eine VBA-Funktion und kann nicht direkt in einer Excel-Formel verwendet werden. Du musst den Pfad zunächst in einer Zellformel oder einer Variablen speichern und dann in deiner Formel 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