in einem Verzeichnis liegen ca. 50 leere Excelformulare,
die von Mitarbeitern nach und nach bearbeitet werden sollen.
Um zu prüfen, ob eine Bearbeitung erfolgt ist, müßte ich
jede Datei einzeln öffnen.
Gibt es eine Möglichkeit, z.B. in einer weiteren Exceldatei
alle im Verzeichnis vorhandenen Dateien auf einen Eintrag
in z.B. Zelle C4 zu überprüfen und die Dateien anzeigen
zu lassen, in denen ein Eintrag vorhanden ist?
ja, das müsste gehen!
Mach einfach eine Excel-Kontroll-Datei mit externen Bezügen auf all diese 50 Excel-Formulare, die du „überwachen“ möchtest, dann hast du eine Info, wenn in Zelle C4 ein Eintrag gemacht wurde.
hier zwei Lösungen per Makro. Die 2. Lösung generiert die von Finus vorgeschlagenen Formeln.
Sub PruefenDokumente1()
' Öffnet die Dokumente, und trägt die Werte aus "C4" in Tabelle ein
Dim Dateiname, Verzeichnis As String, wks As Worksheet, wb As Workbook
Verzeichnis = "C:\Lokale Daten\Test\EXCEL"
Dateiname = Dir(Verzeichnis & "\*.XLS")
Set wks = ThisWorkbook.Sheets(1)
With wks
.Cells.ClearContents
Zeile = 1
.Cells(Zeile, 1) = "Dateiname"
.Cells(Zeile, 2) = "Wert C4"
Application.ScreenUpdating = False
Do Until Dateiname = ""
Workbooks.Open Filename:=Verzeichnis & "\" & Dateiname
Set wb = ActiveWorkbook
Zeile = Zeile + 1
.Cells(Zeile, 1) = Dateiname
.Cells(Zeile, 2) = wb.Sheets(1).Range("C4").Value
wb.Close False
Dateiname = Dir
Loop
Application.ScreenUpdating = True
End With
End Sub
2. Vorschlag
Sub PruefenDokumente2()
' Generiert in einer Tabelle Formeln, die aus den Dateien die Werte in C4 auslesen
Dim Dateiname, Verzeichnis As String, wks As Worksheet, wb As Workbook
Verzeichnis = "C:\Lokale Daten\Test\EXCEL"
Dateiname = Dir(Verzeichnis & "\*.XLS")
Set wks = ThisWorkbook.Sheets(1)
With wks
.Cells.ClearContents
Zeile = 1
.Cells(Zeile, 1) = "Dateiname"
.Cells(Zeile, 2) = "Wert C4"
Application.ScreenUpdating = False
Do Until Dateiname = ""
Zeile = Zeile + 1
.Cells(Zeile, 1) = Dateiname
.Cells(Zeile, 2).FormulaR1C1 = \_
"='" & Verzeichnis & "\[" & Dateiname & "]Tabelle1'!R4C3"
Dateiname = Dir
Loop
Application.ScreenUpdating = True
End With
End Sub
Gruß
Franz
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Deine Lösung 1 ist große Klasse, funktioniert prima.
Läßt sich der in A1 angezeigte Dateiname noch automatisch
mit der Datei verlinken? Das wäre die eierlegende Wollmilchsau
Wenn nicht, ist nicht tragisch. Du hast mir sehr geholfen.
Gruß
Rolf
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Deine Lösung 1 ist große Klasse, funktioniert prima.
Läßt sich der in A1 angezeigte Dateiname noch automatisch
mit der Datei verlinken? Das wäre die eierlegende Wollmilchsau
Wenn nicht, ist nicht tragisch. Du hast mir sehr geholfen.
Gruß
Rolf
Hallo Rolf,
hier die Erweiterung zur eierlegenden Wollmilchsau.
Private Sub Worksheet\_SelectionChange(ByVal Target As Range)
If Target.Column = 1 And Target.Row \> 1 And Not IsEmpty(Target) Then
Verzeichnis = "C:\Lokale Daten\Test\EXCEL"
Workbooks.Open Filename:=Verzeichnis & "\" & Target.Value
End If
End Sub
Dieses Makro muß du im VBA-Editor unter „Tabelle1“ einfügen und das Verzeichnis anpassen. Bei Klick auf einen Dateinamen in Spalte A der Tabelle wird dann die Datei geöffnet.
in einem Verzeichnis liegen ca. 50 leere Excelformulare,
die von Mitarbeitern nach und nach bearbeitet werden sollen.
Um zu prüfen, ob eine Bearbeitung erfolgt ist, müßte ich
jede Datei einzeln öffnen.
Gibt es eine Möglichkeit, z.B. in einer weiteren Exceldatei
alle im Verzeichnis vorhandenen Dateien auf einen Eintrag
in z.B. Zelle C4 zu überprüfen und die Dateien anzeigen
zu lassen, in denen ein Eintrag vorhanden ist?
Oder ist das jetzt sehr weit hergeholt?
Danke für jeden Lösungsansatz.
Gruß
Rolf
Hallo Rolf,
hier zwei Lösungen per Makro. Die 2. Lösung generiert die von
Finus vorgeschlagenen Formeln.
Sub PruefenDokumente1()
’ Öffnet die Dokumente, und trägt die Werte aus „C4“ in
Tabelle ein
Dim Dateiname, Verzeichnis As String, wks As Worksheet, wb
As Workbook
Verzeichnis = „C:\Lokale Daten\Test\EXCEL“
Dateiname = Dir(Verzeichnis & „*.XLS“)
Set wks = ThisWorkbook.Sheets(1)
With wks
.Cells.ClearContents
Zeile = 1
.Cells(Zeile, 1) = „Dateiname“
.Cells(Zeile, 2) = „Wert C4“
Application.ScreenUpdating = False
Do Until Dateiname = „“
Workbooks.Open Filename:=Verzeichnis & „“ &
Dateiname
Set wb = ActiveWorkbook
Zeile = Zeile + 1
.Cells(Zeile, 1) = Dateiname
.Cells(Zeile, 2) = wb.Sheets(1).Range(„C4“).Value
wb.Close False
Dateiname = Dir
Loop
Application.ScreenUpdating = True
End With
End Sub
Gruß
Franz
Hallo zuammen,
das vorstehende Makro liest mir, Franz sei Dank, Daten aus
Dateien aus, die in einem eigenen Verzeichnis stehen.
Damit man sieht, ob weitere Dateien hinzugekommen sind,
wäre es nett, wenn er mir die Anzahl der eingelesenen Dateien
irgendwo hinschreiben würde, nach B1 z.B.
das vorstehende Makro liest mir, Franz sei Dank, Daten aus
Dateien aus, die in einem eigenen Verzeichnis stehen.
Damit man sieht, ob weitere Dateien hinzugekommen sind,
wäre es nett, wenn er mir die Anzahl der eingelesenen Dateien
irgendwo hinschreiben würde, nach B1 z.B.
Hi Rolf,
Option Explicit
Sub PruefenDokumente1()
' Öffnet die Dokumente, und trägt die Werte aus "C4" in Tabelle ein
Dim Dateiname, Verzeichnis As String, wks As Worksheet, wb As Workbook
Application.ScreenUpdating = False
On Error GoTo Fehler
Verzeichnis = "C:\Lokale Daten\Test\EXCEL"
Dateiname = Dir(Verzeichnis & "\*.XLS")
Set wks = ThisWorkbook.Sheets(1)
With wks
.Cells.ClearContents
Zeile = 1
.Cells(Zeile, 1) = "Dateiname"
.Cells(Zeile, 2) = "Wert C4"
Do Until Dateiname = ""
Workbooks.Open Filename:=Verzeichnis & "\" & Dateiname
Set wb = ActiveWorkbook
Zeile = Zeile + 1
.Cells(Zeile, 1) = Dateiname
.Cells(Zeile, 2) = wb.Sheets(1).Range("C4").Value
wb.Close False
Dateiname = Dir
Loop
.Range("B1") = Zeile
End With
Fehler:
Application.ScreenUpdating = True
End Sub