Anzeige
Archiv - Navigation
1876to1880
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

Zugriff auf bestimmte Files und Folders

Zugriff auf bestimmte Files und Folders
30.03.2022 09:37:45
Filikos
Ausgangslage:
Es gibt eine Masterdatei, welche sich Werte aus zahlreiche Quelldateien (an jeweils unterschiedlicher Stelle) holt. Grundsätzlich funktioniert das Aktualisieren der Daten. Es sei denn, ein User hat eine der Quelldateien umbenennt oder verschoben. Oder der User, welche die Masterdatei öffnet, hat keine Leseberechtigung für eine oder alle Quelldateien.
Ziel:
Ich möchte folgendes Verhalten beim Öffnen der Masterdatei:
- Es soll eine Meldung erfolgen bei fehlender Berechtigung auf die Quelldatei(en)
- Es soll eine Meldung erfolgen, wenn Quelldatei(en) nicht existieren
- Die Werte sollen gleich beim Öffnen aktualisiert werden
- Die Masterdatei soll offen bleiben im Anschluss an eine Meldung
Mit meinen bescheidenen VBA-Kenntnissen stehe ich nun an folgenden Punkten an:
- Wie bekomme ich die unterschiedlichen Dateipfade in ein Array? (in Realität sind es deutlich mehr als drei Dateien)
- Motivation für das Array: ich möchte mit einer Schleife die Berechtigung, die Datei-Existenz und das letzte Speicherdatum prüfen/abfragen.
- Mein rudimentärer Ansatz funktioniert nur bedingt: bei Bestätigung einer Error-Meldung schliesst sich Excel, was in diesem Fall unerwünscht ist.
- Ziel ist, dass die Fehlermeldung differenziert ausfällt.
Danke für eure Hilfe.
Mein bisheriger Code:
Option Explicit

Private Sub Workbook_Open()
'Variablen
Dim dirBCH As String
Dim dirKKJ As String
Dim dirTMP As String
'Stellenplan-Excel-Quelldateien
dirBCH = "\\PfadA\bch.xlsx"
dirKKJ = "\\PfadB\kkj.xlsx"
dirTMP = "\\PfadC\tmp.xlsx"
On Error GoTo Fehler
'Alle Stellenplan-Excel-Quellendateien aktualisieren
Call ThisWorkbook.UpdateLink(Name:=ThisWorkbook.LinkSources, Type:=xlLinkTypeExcelLinks)
'Aktualisieren Speicherdatum Stellenplan-Excel-Quelldateien
'BCH
Range("U6").Value = FileDateTime(dirBCH)
Range("U15").Value = FileDateTime(dirBCH)
Range("U16").Value = FileDateTime(dirBCH)
Range("U27").Value = FileDateTime(dirBCH)
'KKJ
Range("U8").Value = FileDateTime(dirKKJ)
Range("U18").Value = FileDateTime(dirKKJ)
Range("U29").Value = FileDateTime(dirTMP)
MsgBox "Alle Daten wurden aktualisiert!"
Exit Sub
Fehler
MsgBox "Keine Aktualisierung der verknüpften Werte! Berechtigung auf  X, Y fehlt bzw. Folder A, B existiert nicht."
End Sub

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zugriff auf bestimmte Files und Folders
30.03.2022 09:55:11
Oberschlumpf
Hi,
n paar Gegenfragen
1. Angenommen, die Datei "\\PfadA\bch.xlsx" wurde vom Kollegen nicht nur in "abc.xlsx" umbenannt, sondern auch noch nach "\\Pfad_XYZ\abc.xlsx" verschoben.
Woher soll denn Excel wissen, dass seine verknüpften Dateien umbenannt und verschoben wurden?
2. Fast Gleiches wie 1.
Was ist, wenn nur die Datei umbenannt wurde? Auch hier weiß Excel doch nicht, welche der vielen Dateinamen zu der Datei mit dem "alten" Dateinamen gehört.
Die Kollegen sollen einfach die Finger von den Dateien lassen!
Wieso benennen die Kollegen eigentlich die Dateinamen um?
Was die Lösung mit dem Array betrifft, ist das kein Problem.
Hier ein Bsp für den Pfad "\\PfadA\"

Sub test()
lstrFile As String, lstrArr() As String
ReDim lstrArr(0)
lstrFile = Dir("\\PfadA\*.xlsx")
Do Until lstrFile = ""
lstrArr(UBound(lstrArr) = "\\PfadA\ & lstrFile
ReDim Preserve lstrArr(UBound(lstrArr) + 1)
Loop
ReDim Preserve lstrArr(UBound(lstrArr) - 1)
End Sub
Nach Durchlauf dieses Makros würden sich im Array lstrArr alle xlsx-Dateien aus dem Pfad "\\PfadA\" befinden.
Dieses Makro kannst du auch für andere Pfade verwenden.
Hilfts?
So lange 1. + 2. nicht geklärt ist, könnte ich leider nicht weiterhelfen, da es keinen Sinn macht, wenn die Kollegen weiterhin in den Pfaden "rumpfuschen".
Ciao
Thorsten
Anzeige
AW: Zugriff auf bestimmte Files und Folders
30.03.2022 14:01:55
Filikos
Hi Torsten
1.
In Excel unter "Daten", "Verknüpfungen bearbeiten" sind alle Quelldateien aufgeführt. Excel "weiss" also genau, zu welche Dateien Verknüpfungen vorhanden sind. Klickt der User der Mastertabelle auf "Alle aktualisieren" meldet Excel im Falle von umbenannten oder verschobenen Dateien, dass ein Wert / mehrere nicht aktualisiert werden konnte/n. Und im Status-Fenster sieht er, welche der Dateien nicht (mehr) gefunden werden konnte.
2.
Keine der Dateien liegt im selben Pfad. Ich kenne die Pfadangaben jedoch und möchte diese nun in Array schreiben: myArray () = dirBCH, dirKKJ, dirTMP, dirXX etc. So kann ich die Elemente mit for each - oder wie auch immer - abarbeiten.
Danke für deinen Support.
Anzeige
AW: Zugriff auf bestimmte Files und Folders
30.03.2022 18:09:13
Oberschlumpf
Hi,
zu 1. hast du mich falsch verstanden - oder ich dich noch immer nicht :-)
Natürlich weiß Excel, mit welchen Dateien seine Datei verknüpft ist, sonst könnte Excel ja nicht updaten ;-)
Aber ich hatte gedacht, du willst dann rausfinden, wie der "neue" Name der Datei ist, wenn Datei umbenannt wurde, damit der "neue" Name in Excels Verknüpfungen angepasst werden kann, damit eben das Update wieder möglich ist.
Und genau hier sah ich das Problem, dass genau das nicht geht, weil Excel ja den neuen Namen der Datei nicht kennen kann.
Ok, da war ich wohl einen Schritt zu weit - du willst den "neuen" Dateinamen gar nicht anpassen, sondern nur wissen, welcher Name geändert wurde und genau dafür ne Fehler-MsgBox ausgeben.
Ciao
Thorsten
Anzeige
AW: Zugriff auf bestimmte Files und Folders
30.03.2022 10:10:01
Rudi
Leseberechtigung kannst du mit

Function HatLeseBerechtigung(strFile As String) As Boolean
On Error GoTo ERREXIT
Open strFile For Input As #1
ERREXIT:
Close #1
If Err.Number = 75 Then
HatLeseBerechtigung = False
Else
HatLeseBerechtigung = True
End If
End Function
prüfen.
if not hatleseberechtigung(dirbch) then msgbox ....
Gruß
Rudi
AW: Zugriff auf bestimmte Files und Folders
30.03.2022 15:21:10
Filikos
Hallo Rudi
Danke für den Input. Da es sehr viele Dateien sind (ich habe der Einfachheit halber einfach nur 3 deklariert), müsste ich die Pfade zuerst noch in ein Array bekommen und abfragen. Leider schliesst Excel beim Quittieren der MsgBox die Masterdatei. Wie kann ich das verhindern? Die Master-Datei soll eigentlich offen bleiben. Die MsgBox ist eher eine Art "Warning". Danke dir.
Anzeige
AW: Zugriff auf bestimmte Files und Folders
30.03.2022 19:53:26
Rudi
dass die Datei geschlossen wird, liegt nicht an dem Code.
Gruß
Rudi
AW: Zugriff auf bestimmte Files und Folders
30.03.2022 16:09:34
Yal
Hallo Filikos,
ich würde niemals eine so vollständige Prozedure direkt in Workbook_Open ablegen, sondern separat und diese in Workbook_Open abrufen (Geschmacksache, gebe ich zu).
Behandlung von Dateien macht am besten mit der Library Scripting Runtime: "Extras", "Verweise...", Haken bei "Microsoft Scripting Runtime"
Warum Du unbedingt über einen Array, anstatt die Information direkt zu konsumieren, ist rätselhaft, aber gut.
Folgende Skript hat fast alles, was Du brauchst, inkl. Fehlerbehandlung. Die Fehlernummer müsstest Du anpassen. Das Speichern der Datei-Infos in einem Array bekommst Du auch hin.
Je nach dem wieviele Dateien berücksichtigt werden, ist es fraglich, ob jedesmal einen Msgbox herausgegeben werden soll oder die Übeltäter einfach aufgelistet werden.

Private Sub Workbook_Open()
Datei_lesen
End Sub
Sub Datei_lesen()
'unter Anbindung von "Microsoft Scripting Runtime" ("Extras", "Verweise...", Haken bei der benannten Library)
Dim arrDatei
Dim FSO As New FileSystemObject
Dim DateiPfad
Dim Datei As File
Dim DateiZahl As Long
arrDatei = Array("\\PfadA\bch.xlsx", "\\PfadB\kkj.xlsx", "\\PfadC\tmp.xlsx")
On Error GoTo Catch
Try:
For Each DateiPfad In arrDatei
Set Datei = Nothing
Set Datei = FSO.GetFile(DateiPfad)
If Not Datei Is Nothing Then
DateiZahl = DateiZahl + 1
With Worksheets(1).Range("A9999").End(xlUp)
.Offset(1, 0) = Datei.ShortPath
.Offset(1, 1) = Datei.Name
.Offset(1, 2) = Datei.DateLastModified
End With
End With
Next
MsgBox "Es wurden " & DateiZahl & " Dateien gelesen."
GoTo Finally
Catch:
Select Case Err.Number
Case 666 'ersetzen durch Fehlernummer für Datei nicht gefunden
MsgBox "Datei """ & DateiPfad & """ nicht gefunden."
Resume Next
Case 777 'ersetzen durch Fehlernummer für fehlende Leserechte
MsgBox "Fehlende Leserechte für Datei """ & DateiPfad & """."
Resume Next
Case Else
MsgBox "Sonstige Fehler. Abbruch"
End Select
Finally:
'in dem Fall nichts
End Sub
VG
Yal
Anzeige
AW: Zugriff auf bestimmte Files und Folders
30.03.2022 16:31:34
Filikos
Hi Yal
Die Idee mit dem Array stammt aus naivem Vorwissen. Wenn es anders geht, umso besser. Dito die Fehlermeldungen: der User wird es danken, wenn am Schluss eine Meldung mit den Gründen für die nicht ausgeführten Daten-Updates angezeigt wird. Danke für deine Hilfe - nun habe ich einiges zu studieren und zu schauen, ob ich alles lauffähig hinbekomme ;-).
AW: Zugriff auf bestimmte Files und Folders
01.04.2022 11:54:11
Filikos
Danke für die Inputs.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige