VisualBasic Relativer Pfad Probleme

paddy17

Cadet 2nd Year
Registriert
Okt. 2008
Beiträge
31
Hallo und Guten Morgen,

ich habe ein Problem mit meinem Code.
Erstmal zu meiner Augfabenstellung:
Ich habe mehrere Exceldateien (Mitarbeiter1.xls; Mitarbeiter2.xls; Mitarbeiter3.xls; usw.) mit mehreren Arbeitsblättern (Gesamt; Jan; Feb; März; usw.)! In der Tabelle von "Gesamt" steht jetzt z.B. in D10 = 8; D11= 9 und D12 = 10
Ich soll jetzt eine Exceldatei (Alle_Datei.xls) erstellen, wo, von Mitarbeiter1.xls, Mitarbeiter2.xls Mitarbeiter3.xls, alle Werte von "Gesamt" ausgegeben werden und auch zusammengerechnet werden, um eine Gesamtsumme von allen Mitarbeitern habe.
Ergebnisse:
Ich habe es schonmal soweit geschaftt, dass ich alle Werte von "Gesamt" von allen Mitarbeitern in die Alle_Datei.xls kopieren lasse, in weißer Schrift auf weißem Hintergrund und dann die Summe in der richtigen Spalte ausgeben lasse.
Jetzt kommt mein Problem… Das ganze funktioniert aber nur mit dem absoluten Pfad. Das ganze wird aber auf einem Netzlaufwerk liegen, das bei jedem Mitarbeiter eine andere Laufwerksbezeichnung hat! Also muss es mit einem relativen Pfad funktionieren, welchen ich aber nicht zum laufen kriege.

Evtl. kennt sich ja einer gut genug mit VBA aus und kann meinen Code entsprechend ändern oder mir eine alternative voschlagen.

Noch ein paar Sachen die vllt. wichtig sein könnten:
- Nur die Laufwerksbezeichnung ist bei allen anders, nicht aber die Ordnerstruktur! (*:\\123\abc\)
- Die Datei Alle_Datei.xls ist im selben Ordner, wie die anderen Dateien (Mitarbeiter1.xls; Mitarbeiter2.xls; Mitarbeiter3.xls)!
- Nach möglichkeit sollten die Mitarbeiterdateien nicht geöffnet werden

Ich hoffe, dass ich verständlich genug geschrieben habe.

Danke
paddy
 

Anhänge

  • bsp.JPG
    bsp.JPG
    77,1 KB · Aufrufe: 338
Gehts nicht mit nem UNC-Pfad?

Sowas wie \\servername\freigabe\ordnerstuktur ?
 
Ich habe jetzt statt strPath = "D:\\Dokumente und Einstellungen\usw..."
strPath = "\\server\freigabe\Ordner". Er gibt aber immernoch keinen Wert aus...

Edit: Kann es sein das es Probleme gibt, wegen einem Unterstrich im Namen der Datei?
 
Zuletzt bearbeitet:
Ich weiß nicht, ob VBA überhaupt mit relativen Pfaden klarkommt, aber man kann das ganze umgehen, in dem man den aktuellen Pfad mit dem möglichen Ziel abgleicht.

Wenn dein "relatives Ziel" z.B. "\unterordner\daten.xlsx" wäre, dann kannst du mit
ThisWorkbook.Path den aktuellen Pfad abfragen. Wenn du das dann hintereinander hängst, hast du dir selbst den absoluten Pfad konstruiert - je nachem von wo aus das Skript ausgeführt wird.
 
Kagee schrieb:
Wenn dein "relatives Ziel" z.B. "\unterordner\daten.xlsx" wäre, dann kannst du mit ThisWorkbook.Path den aktuellen Pfad abfragen. Wenn du das dann hintereinander hängst, hast du dir selbst den absoluten Pfad konstruiert - je nachem von wo aus das Skript ausgeführt wird.

Wie müsste denn dann der Code aussehen für die Datei Mitarbeiter1.xls in den Ordner z.b. Z:\\asdf\jklö\Neuer Ordner ??

Und wo genau müsste ich den Code hin schreiben?

Bin leider ein totaler Anfänger in VBA :(
 
Also, da Excel selbst Dateien auf UNC-Pfaden öffnen kann, wirds das Makro auch hinkriegen.
Dein Schnappschuss zeigt ja auch nur wie der Pfad zusammengebastelt wird, und nicht wie die Datei geladen und Werte gelesen werden. Das müsste dann wohl in "ExecuteExcel4Macro" liegen. Evtl. ist dort ein Fehler der bei relativen Pfaden greift.

Noch ein Tipp: Wenn du Office > 2003 hast, dann kannst du Verknüpfungen über mehrere Dateien machen.
Also eine Zieldatei öffnen und aus einer anderen Excel-Datei Zellerverknüpfungen holen.
Wenn dann alles zusammen auf einem UNC-Pfad liegt dürfte dein Problem gelöst sein. Ganz ohne Makros.
Ob das bei Excel 2003 auch geht, weiß ich nicht.
 
paddy17 schrieb:
Wie müsste denn dann der Code aussehen für die Datei Mitarbeiter1.xls in den Ordner z.b. Z:\\asdf\jklö\Neuer Ordner ??

Und wo genau müsste ich den Code hin schreiben?

Bin leider ein totaler Anfänger in VBA :(

Ich bin bei dem Beispiel davon ausgegangen, dass die Excel-Datei, die das Script beinhaltet selbst auf dem betreffenden Laufwerk liegt. Wenn das nicht der Fall ist kommst du nicht umhin den Nutzer zu Fragen als welchen Buchstaben er das Laufwerk eingehängt hat. Eventuell schafft man es mit der Laufwerksbezeichnung - aber auch die ist ja variabel.

Wie gesagt mein Ansatz geht davon aus, dass die Datei Alle_Datei.xls im Ordner \\123\abc\ liegt und z.B. im selben Ordner dann die Unterordner für die Mitarbeiter liegen (etwa \\123\abc\MA1\, \\123\abc\MA2\ usw.). Dann müstest du ein Script in der Datei Alle_Datei.xls anlegen, was ungefähr folgendes macht:
Code:
Dim basePath As String
    
    basePath = ThisWorkbook.Path
    
    'Nun kann man mit basePath & "\MA1" den ersten Ordner ansteuern.
    Dim ersterMitarbeiterPath As String
    ersterMitarbeiterPath = basePath & "\MA1"

so ganz grob
 
@Kagee
das sieht ja schonmal gut aus. ich werde es mal morgen versuchen...

Also die Alle_Datei.xls liegt genau so wie die Mitarbeiter*.xls im Ordner "abc", aber auf einem Netzlaufwerk, weswegen die Laufwerksbezeichnung bei jedem ja anders ist.
werde mich dann morgen nochmal melden.
So kompliziert :freak:
 
Zurück
Oben