Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ThisWorkbook.Path auf Netzlaufwerk

Forumthread: ThisWorkbook.Path auf Netzlaufwerk

ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 11:57:34
Chris
Hallo liebe Excel und VBA Gemeinde,
könnt Ihr Euch mal bitte das Skript anschauen. Wenn ich es lokal ausführe funktioniert es. Wenn ich aber die Dateien auf ein Netzlaufwerk lege, schmiert Excel ab. Was muss ich ändern, damit das Skript auch auf Netzwerklaufwerken funktioniert?
Als vertrauenwürdige Speicherorte sind die Netzlaufwerke hinzugefügt.
Das Skript habe ich hier mit freundlicher Unterstützung von "EDE" erhalten und angepaßt.
Wäre super, wenn Ihr mir weiterhelfen könnt!
Hier das Skript:

Sub t()
Dim xl As Object, wb As Workbook, Counter As Long
pfad = ThisWorkbook.Path & "\"
Set xl = CreateObject("excel.application")
' für alle ID's aus Spalte A
For i = 3 To Cells(Rows.Count, 1).End(xlUp).Row
On Error Resume Next
' MsgBox pfad & Cells(i, 1) & ".xlsx"
Set wb = xl.Workbooks.Open(Filename:=pfad & Cells(i, 1) & ".xlsx")
Set ws = wb.Sheets(1)
lz = ws.Cells(Rows.Count, 1).End(xlUp).Row
For ii = 2 To lz
If ws.Cells(ii, 1) = 1060 Then
Cells(i, 4) = ws.Cells(ii, 4)
Cells(i, 5) = ws.Cells(ii, 9)
Exit For
End If
Next ii
wb.Close False
Set wb = Nothing
Next i
Set xl = Nothing
xl.Quit
End Sub

Anzeige

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 12:26:52
Torsten
Hallo Chris,
was heisst "schmiert Excel ab"? Gibt es eine Fehlermeldung oder was passiert?
Ich hatte bei uns in der Firma ein aehnliches Problem. Viellecht bringt dich das auf die richtige Spur.
Das Problem war, dass manche Benutzer die Makro Dateien verwenden konnten, wo Pfadverweise auf Netzwerkpfade vorlagen, aber andere nicht. Das lag hier daran, dass unsere IT kein einheitliches Verfahren zum Festlegen des Laufwerkbuchstabens fuer das Netzwerklaufwerk benutzte. Bei einem User war es H: beim naechsten Y: usw. Dann habe ich die Pfadverweise zum Netzlaufwerk geaendert mit dem absoluten Pfad, sprich \\pfadname\........ Als Beispiel, in unserem Falle war das dann:
\\murplfp01\Workgroups\und dann die Ordnerstruktur bis zum Zielordner

Dann gabs keine Probleme mehr.
Gruss Torsten
Anzeige
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 12:33:21
Chris
Hallo Torsten,
vielen Dank für Deine Antwort. Leider bringen UNC-Pfade auch keine Lösung. Zudem haben bei uns alle Clients das gleiche Mapping.
Schmiert ab, bedeutet, die Uhr dreht und dreht und es passiert nicht mehr. Es hilft nur noch den Task zu beenden.
Grüße
Chris
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 12:55:14
ede
Hallo Chris,
ich vermute mal dann gibt es eine Datei aus der Spalte ID nicht und im Hintergrund kommt ein Dialog "Leider konnte die Datei 'xyz' nicht gefunden werden....' !
Gruss
ede
Anzeige
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 13:03:48
Chris
Wow! Du kannst ja die Glaskugel lesen ;-)
Ja, wenn ich den Task abbreche, kommt tatsächlich der Hinweis. Aber warum geht das lokal?
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 13:06:10
ede
bin ich auch gerade am überlegen, evtl. kennt jemand das Problem oder weiß wie man die Meldung abfangen kann!
ede
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 13:16:45
ede
teste mal nachstehende Code:

Sub t2()
Dim xl As Object, wb As Workbook
Dim pfad As String
Dim i As Long, ii As Long, lz As Long, lsp As Long
Dim myws As Worksheet
Dim strFilename As String
'Blattname evtl. anpassen
Set myws = ActiveWorkbook.Sheets("Sheet1")
pfad = ThisWorkbook.Path & "\"
Set xl = CreateObject("excel.application")
lsp = myws.Cells(1, Columns.Count).End(xlToLeft).Column  'letzte Spalte in 'Übersicht'
' für alle ID's aus Spalte A
For i = 3 To myws.Cells(Rows.Count, 1).End(xlUp).Row
On Error GoTo fehler
strFilename = pfad & myws.Cells(i, 1) & ".xlsx"
If Dir(strFilename) = "" Then GoTo fehler
Set wb = xl.Workbooks.Open(Filename:=strFilename)
Set ws = wb.Sheets(1)
lz = ws.Cells(Rows.Count, 1).End(xlUp).Row              'letzte Zeile in akt. DAtendatei
' für alle Spalten der Zeile 1 im 2er-step
For sp = 4 To lsp Step 2
For ii = 3 To lz
If ws.Cells(ii, 1) = myws.Cells(1, sp) Then
myws.Cells(i, sp) = ws.Cells(ii, 4)
myws.Cells(i, sp + 1) = ws.Cells(ii, 9)
End If
Next ii
Next sp
wb.Close False
Set wb = Nothing
fehler:
Next i
Set xl = Nothing
'xl.Quit
End Sub
gruss
ede
Anzeige
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 13:32:39
Chris
Nein, das funktioniert leider nicht. Excel schmiert zwar nicht ab, aber es werden auch keine Werte ausgelesen.
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 13:33:48
ede
hast du den Blattnamen angepasst?
'Blattname evtl. anpassen
Set myws = ActiveWorkbook.Sheets("Sheet1")
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 13:46:46
Chris
Ja, habe ich bzw. die Tabelle heißt die ganze Zeit so.
Anzeige
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 13:50:05
ede
ok, dann hier nochmal der Code von t() für nur eine Kostenstelle 1060, der Code muss in das entsprechende Tabellenblatt, nicht in ein Modul:

sub t()
Dim xl As Object, wb As Workbook, Counter As Long
Dim ws As Worksheet
Dim strFilename As String, pfad As String
Dim i As Long, ii As Long, lz As Long
pfad = ThisWorkbook.Path & "\"
Set xl = CreateObject("excel.application")
For i = 3 To Cells(Rows.Count, 1).End(xlUp).Row
On Error Resume Next
strFilename = pfad & Cells(i, 1) & ".xlsx"
If Dir(strFilename) = "" Then
MsgBox strFilename & " fehlt!", vbCritical, "Fehler"
Else
Set wb = xl.Workbooks.Open(Filename:=pfad & Cells(i, 1) & ".xlsx")
Set ws = wb.Sheets(1)
lz = ws.Cells(Rows.Count, 1).End(xlUp).Row
For ii = 2 To lz
If ws.Cells(ii, 1) = 1060 Then
Cells(i, 4) = ws.Cells(ii, 4)
Cells(i, 5) = ws.Cells(ii, 9)
Exit For
End If
Next ii
wb.Close False
Set wb = Nothing
End If
Next i
Set xl = Nothing
xl.Quit
End Sub

Anzeige
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 14:12:45
Chris
Jepp, das funktioniert!
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 14:16:27
ede
unlogisch, der Code von t2() war eigentlich dynamisch für alle Kostenstellen ab der Spalte 4 von Zeile 1!
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 14:26:27
Chris
Ok, das wird der Fehler sein. Bei mir fangen die IDs erst in Zeile 4 an. Was muss ich denn in t2() dafür ändern?
Anzeige
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 14:33:01
ede
kann nicht sein, das ist in beiden Proceduren gleich, wenn erst ab 4. Zeile, dann aus der 3 eine 4 machen:

' für alle ID's aus Spalte A
For i = 3 To myws.Cells(Rows.Count, 1).End(xlUp).Row
kannst du nochmal eine Beispieldatei abstellen?
ede
Anzeige
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 14:34:22
ede
in welcher Zeile stehen die Kostenstellen(1060, 1065,...)?
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 14:36:34
Chris
Ich schicke Dir Beispiele ...
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 14:57:12
ede
da sind ja die Kostenstellen auch nicht mehr in der Zeile 1, sondern in Zeile 2!!!
Dann teste mal jetzt diesen Code, wobei in der Variablen ZeileKoSt die Zeilennummer steht.

Sub t2()
Dim xl As Object, wb As Workbook
Dim pfad As String
Dim i As Long, ii As Long, lz As Long, sp As Long, lsp As Long
Dim myws As Worksheet, ws As Worksheet
Dim strFilename As String
Dim zeileKoSt As Long
'Blattname evtl. anpassen
Set myws = ActiveWorkbook.Sheets("Sheet1")
zeileKoSt = 2
pfad = ThisWorkbook.Path & "\"
Set xl = CreateObject("excel.application")
lsp = myws.Cells(zeileKoSt, Columns.Count).End(xlToLeft).Column  'letzte Spalte in 'Übersicht'
' für alle ID's aus Spalte A
For i = 3 To myws.Cells(Rows.Count, 1).End(xlUp).Row
On Error Resume Next
'Prüfe ob Datei existiert
strFilename = pfad & myws.Cells(i, 1) & ".xlsx"
If Dir(strFilename) = "" Then
MsgBox strFilename & "fehlt!", vbCritical, "Fehler"
Else
'DAtei öffnen
Set wb = xl.Workbooks.Open(Filename:=strFilename)
Set ws = wb.Sheets(1)
lz = ws.Cells(Rows.Count, 1).End(xlUp).Row   'letzte Zeile in akt. Datendatei
' für alle Spalten der Zeile 'zeileKoST' im 2er-step
For sp = 4 To lsp Step 2
'für alle Zeilen der Spalte 1(A) der Datendatei
For ii = 3 To lz
If ws.Cells(ii, 1) = myws.Cells(zeileKoSt, sp) Then
myws.Cells(i, sp) = ws.Cells(ii, 4)
myws.Cells(i, sp + 1) = ws.Cells(ii, 9)
End If
Next ii
Next sp
wb.Close False
Set wb = Nothing
End If
Next i
Set xl = Nothing
'xl.Quit
End Sub
Gruss
ede
Anzeige
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 15:12:20
Chris
Es geht leider nicht! Ich habe genau die Dateien genommen, welche ich Dir geschickt habe und den Code in das Tabellenblatt "Sheet1" eingefügt. Jetzt sollte ja zumindest bei ID 1 was stehen. Bleibt aber leider leer.
Grüße
Chris
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 15:17:03
ede
Hallo Chris,
anbei mal der angepasste Code: die Ursache lag darin, das in der Zelle D4 die Kostenstellennummer und Kostenstellenbezeichnung steht. In den einzelnen Datendateien aber nur die KoST-nummer. Ich hab den Code jetzt so angepasst und in ein Modul gelegt.
https://www.herber.de/bbs/user/131333.xlsm

Sub t2()
Dim xl As Object, wb As Workbook
Dim pfad As String
Dim i As Long, ii As Long, lz As Long, sp As Long, lsp As Long
Dim myws As Worksheet, ws As Worksheet
Dim strFilename As String
Dim zeileKoSt As Long
Dim startzeile As Long
'Blattname evtl. anpassen
Set myws = ActiveWorkbook.Sheets("Sheet1")
zeileKoSt = 2
startzeile = 4
pfad = ThisWorkbook.Path & "\"
Set xl = CreateObject("excel.application")
lsp = myws.Cells(zeileKoSt, Columns.Count).End(xlToLeft).Column  'letzte Spalte in 'Übersicht'
' für alle ID's aus Spalte A
For i = startzeile To myws.Cells(Rows.Count, 1).End(xlUp).Row
On Error Resume Next
'Prüfe ob Datei existiert
strFilename = pfad & myws.Cells(i, 1) & ".xlsx"
If Dir(strFilename) = "" Then
MsgBox strFilename & " fehlt!", vbCritical, "Fehler"
Else
'DAtei öffnen
Set wb = xl.Workbooks.Open(Filename:=strFilename)
Set ws = wb.Sheets(1)
lz = ws.Cells(Rows.Count, 1).End(xlUp).Row   'letzte Zeile in akt. Datendatei
' für alle Spalten der Zeile 'zeileKoST' im 2er-step
For sp = 4 To lsp Step 2
'für alle Zeilen der Spalte 1(A) der Datendatei
For ii = 3 To lz
If ws.Cells(ii, 1) = Val(Left(myws.Cells(zeileKoSt, sp), 4)) Then
myws.Cells(i, sp) = ws.Cells(ii, 4)
myws.Cells(i, sp + 1) = ws.Cells(ii, 9)
End If
Next ii
Next sp
wb.Close False
Set wb = Nothing
End If
Next i
Set xl = Nothing
'xl.Quit
End Sub
gruss
ede
Anzeige
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 15:31:14
Chris
Super, jetzt funktioniert es!!!
Auch auf die Gefahr, dass Du mir an den Hals springst. Aber die MSG-Box "Fehler" muss kommen, oder kann die auch unterdrückt werden? Jetzt habe ich das Problem, wenn ID-Dateien nicht vorhanden sind, muss ich ewig klicken, bis der Code durchgelaufen ist.
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 15:33:30
ede
ok, für heute der letzte Hinweis, kommentier die Zeile für die MSGBOX einfach aus:
alt:
        MsgBox strFilename & " fehlt!", vbCritical, "Fehler"

neu:
     ' MsgBox strFilename & " fehlt!", vbCritical, "Fehler"

gruss und für weitere Fragen bis morgen
ede
Anzeige
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 17:18:32
Chris
Ich hoffe, dass ich nun alleine klar komme!
Vielen Dank für die geduldige Hilfe!!!
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

ThisWorkbook.Path auf Netzlaufwerk nutzen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und erstelle ein neues VBA-Modul.

  2. Kopiere den folgenden Code in das Modul:

    Sub t()
        Dim xl As Object, wb As Workbook
        Dim pfad As String
        pfad = ThisWorkbook.Path & "\"
        Set xl = CreateObject("excel.application")
    
        For i = 3 To Cells(Rows.Count, 1).End(xlUp).Row
            On Error Resume Next
            Set wb = xl.Workbooks.Open(Filename:=pfad & Cells(i, 1) & ".xlsx")
            If wb Is Nothing Then
                MsgBox "Datei nicht gefunden: " & pfad & Cells(i, 1) & ".xlsx"
            End If
            ' Weitere Kodierung hier...
            wb.Close False
            Set wb = Nothing
        Next i
        xl.Quit
        Set xl = Nothing
    End Sub
  3. Achte darauf, dass der Blattname korrekt ist, falls Du auf ein bestimmtes Blatt zugreifen möchtest.

  4. Führe das Skript aus, um die Dateien im angegebenen Verzeichnis zu öffnen.


Häufige Fehler und Lösungen

  • Excel schmiert ab oder reagiert nicht:

    • Überprüfe, ob die Pfadangabe in ThisWorkbook.Path korrekt ist. Teste alternative Pfade, zum Beispiel UNC-Pfade (\\servername\freigabe\).
  • Datei nicht gefunden:

    • Stelle sicher, dass die Dateien im angegebenen Verzeichnis existieren. Verwende If Dir(strFilename) = "" Then um fehlende Dateien abzufangen.
  • Fehlermeldung während der Ausführung:

    • Nutze On Error Resume Next, um die Ausführung nicht zu stoppen, wenn ein Fehler auftritt, aber beachte, dass dies die Fehlersuche erschweren kann.

Alternative Methoden

  1. Verwendung von UNC-Pfaden: Wenn das Mapping der Netzlaufwerke nicht einheitlich ist, verwende anstelle von ThisWorkbook.Path direkt den UNC-Pfad:

    pfad = "\\servername\freigabe\Ordner\"
  2. Application.ActiveWorkbook.Path: Du kannst auch Application.ActiveWorkbook.Path verwenden, um den Pfad der aktiven Arbeitsmappe zu erhalten, wenn Du sicherstellen möchtest, dass Du immer den richtigen Pfad verwendest.


Praktische Beispiele

Hier sind einige Beispiele, wie Du ThisWorkbook.Path in unterschiedlichen Szenarien nutzen kannst:

  • Beispiel für das Öffnen einer Datei:

    Dim fullPath As String
    fullPath = ThisWorkbook.Path & "\Daten.xlsx"
    Workbooks.Open fullPath
  • Dynamisches Laden von Dateien:

    For i = 1 To 10
        Dim fileName As String
        fileName = ThisWorkbook.Path & "\Datei" & i & ".xlsx"
        If Dir(fileName) <> "" Then
            Workbooks.Open fileName
        End If
    Next i

Tipps für Profis

  • Pfad- und Dateinamensüberprüfung: Verwende If Dir() = "" zur Überprüfung, ob die Datei existiert, bevor Du versuchst, sie zu öffnen.

  • Fehlermeldungen unterdrücken: Um die MsgBox für fehlende Dateien zu unterdrücken, kommentiere die entsprechende Zeile mit MsgBox aus.

  • Leistungsoptimierung: Deaktiviere Bildschirmaktualisierungen mit Application.ScreenUpdating = False am Anfang des Codes und setze es am Ende wieder auf True, um die Ausführungsgeschwindigkeit zu verbessern.


FAQ: Häufige Fragen

1. Warum funktioniert ThisWorkbook.Path nicht auf einem Netzlaufwerk? Wenn die Datei auf einem Netzlaufwerk nicht gefunden wird, könnte dies an Berechtigungen oder an einem nicht korrekt gesetzten Pfad liegen.

2. Kann ich den Code anpassen, um mehrere Dateien gleichzeitig zu öffnen? Ja, indem Du eine Schleife implementierst, die durch die Dateinamen iteriert, kannst Du mehrere Dateien mit einem einzigen Skript öffnen.

3. Wie kann ich sicherstellen, dass der Code auch für andere Benutzer funktioniert? Verwende relative Pfadangaben oder UNC-Pfade, um sicherzustellen, dass andere Benutzer auf dieselben Dateien zugreifen können, unabhängig von ihren Netzlaufwerk-Mappings.

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