Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1704to1708
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

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

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
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?
Anzeige
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.
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?
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
AW: ThisWorkbook.Path auf Netzlaufwerk
08.08.2019 14:34:22
ede
in welcher Zeile stehen die Kostenstellen(1060, 1065,...)?
Anzeige
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!!!

14 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige