Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1256to1260
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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
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
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
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

15 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige