Alle Dateien mit vordefinierbarem Namensbestandteil anzeigen lassen

Guten Tag werte Experten.

Ich habe von in einem anderen Threat, von einem sehr freundlichen Forenuser, eine Datei zur Verfügung gestellt bekommen. In dieser Datei kann man alle Dateien eines Ordnerpfades und sämtlicher untergeordneter Ordner anzeigen lassen.
Außerdem kann man in einer Zelle vordefinieren, welchen Bestandteil der Dateiname enthalten soll, um aufgelistet zu werden.
Wenn man dann durch Knopfdruck die Daeiliste erstellen lässt, wird ein neues sheet erstellt, in dem alle antsprechenden Dateien aufgelistet sind.
Das ist soweit auch sehr komfortabel, stellt mich allerdings vor ein Problem.
Um damit effektiv arbeiten zu können, muss ich in dem erstellten sheet jedoch weitere Forlmen etc eingeben.
Jedoch sind natürlich alle meine Eingaben für die Katz, wenn ich die Dateiliste aktualisieren muss, da dann wieder ein neues sheet erstellt wird.

Meine Frage ist nun, kann man die Datei ggf. abwandeln, so das man zB einen Button zum aktualisieren hat, ohne das meine Eintäge gelöscht werden?
Oder kann man eine entsprechende neue Datei relativ leicht realisieren?
-Es soll darin eine Zelle vorgesehen sein um den Bastandteil des Dateinamens durch Eingabe zu definieren.
-Es soll darin eine Zelle vorgesehen sein um den Dateipfad in dem gesucht wird zu definieren.
-Es soll eine Auflistung der gefundenen Dateien erfolgen ohne das ein neues sheet erstellt wird.
-Eingaben in dem sheet sollen bei neuem einlesen der Dateinen erhalten bleiben.
-Die gefundenen und aufgelisteten Dateien sollen durch Doppelklick geöffnet werden.

Ich weiß, das ist ne menge Holz aber vielleicht kann mir ja doch jemand helfen.
Die Datei aus dem anderen Threat hänge ich an:

00_Datei_Liste-Kopie.xlsm

Danke und Gruß TB

Hallo TB

kann man die Datei ggf. abwandeln, so das man zB einen Button zum aktualisieren hat, ohne dass meine Einträge gelöscht werden?

Ich hätte folgende Lösung: Der Button „Neue Dateiliste erstellen“ bleibt erhalten. Dazu kommt ein zweiter Button „Dateiliste aktualisieren“.

Mit diesem zweiten Makro bleibt die bereits existierende Dateiliste (Tabelle) samt allen Einträgen erhalten. Am Ende dieser Liste werden die Dateien aufgelistet, die in der bisherigen Liste nicht aufgeführt waren.

Nähere Angaben zu diesem Makro in der Tabelle „Hinweise“. Besonders zu beachten ist dabei: Die Tabelle, die aktualisiert werden soll, muss an erster Stelle stehen (im Tabellenregister also ganz links).

Was meinst Du dazu? – Grüsse Niclaus

Dateiliste Version 3

Genau so habe ich mir das vorgestellt!
Allerdings gibt es bei der Benutzung einen kleinen Bug.
Wenn eine Datei (aus welchen Grünen auch immer) weg fällt, und man die Liste aktuallisiert, verschwindet die Datei in der Liste nicht.
Das wäre halb so tragisch, man kann den Eintrag ja händisch löschen.
Allerdings wird beim nächsten einlesen einer neuen Datei nun diese Zeile frei gelassen, wodurch eine Lücke entsteht.

Gruß TB

Um dieses Problem „vollautomatisch“ zu lösen, müsste das ganze Prozedere ganz neu strukturiert werden und Deine Arbeitsschritte müssten im Detail bekannt bzw. festgelegt werden. - Ich gehe deshalb von Deiner Aussage aus:
man kann den Eintrag ja händisch löschen

Ich habe das Makro „Sub ListeAktual(Pfad, jj)“ in Modul2b ergänzt: Wenn in Spalte A eine Zelle leer ist, wird die ganze Zeile gelöscht. Eine solche Zeile wird dann nicht mehr frei gelassen.

Grüsse Niclaus

00_Datei_Liste_V4.xlsm

So soll es sein bzw so kann es hervorragend genutzt werden.
Das wird nun meine Basisdatei :thumbsup:

Jetzt muss ich nur noch das Problem lösen, wie ich es schaffe das externe Bezüge zu den Dateien automatisch erstelle werden, so das beispielsweise in der Spalte „E“ immer der Inhalt einer gewissen Zelle der Datei angezeigt wird…

Ich würde das mit einem eigenen Makro „SpalteE()“ erledigen und dazu einen weiteren Button in der Tabelle Hinweise einrichten.
Dazu gebe ich in der Tabelle Hinweise in A28 an, aus welcher Tabelle der aufgelisteten Dateien der Inhalt übernommen werden soll. Und in A29 aus welcher Zelle.

SpalteE

Die Tabelle, die mit dem Makro „bearbeitet“ werden soll, muss (wie schon bei andern Makros) an erster Stelle stehen (im Tabellenregister also ganz links).

Sub SpalteE()
' Formel - in Spalte E
ftabelle1 = Range("Hinweise!A28").Value
fzelle = Range("Hinweise!A29").Value
Sheets(1).Select
    If Sheets(1).Name = "Hinweise" Then Exit Sub
rlast = Range("A1").SpecialCells(xlCellTypeLastCell).Row
ftabelle4 = ftabelle1 & "'!" & fzelle
For k = 2 To rlast
On Error Resume Next
        fpfad = Cells(k, 1)
        yy = Len(fpfad) - Len(Application.Substitute(fpfad, "\", ""))
        fpfad1 = Application.Substitute(fpfad, "\", "\[", yy) & "]" & ftabelle4
        Cells(k, 5).Formula = "='" & fpfad1
Next
End Sub

Wahrscheinlich erscheint beim Start dieses Makros das Fenster: „Verknüpfungen bearbeiten“.
Dort ganz unten „Eingabeaufforderung beim Start …“ anklicken und folgendes aktivieren:
„Keine Warnung anzeigen und Verknüpfung aktualisieren“
Die Datei sofort speichern, sonst bleibt diese Einstellung nicht aktiv.

Dieses Fenster wird auch dann erscheinen, wenn es in einer Datei keine Tabelle gibt mit dem Namen, der in A28 bestimmt ist (hier z. B. „RJan“). Dann kannst Du in diesem Fenster eine andere Tabelle anklicken und mit OK bestätigen.
Oder Du kannst „Abbrechen“ anklicken. Dann erscheint in der Spalte E die Meldung „#BEZUG!“

Das entspäche schon sehr meinen Anforderungen!
Allerding habe ich da noch ein kleines Problem beim einbinden:

Gruß TB

In Deinem Modul6 steht in der ersten Zeile: „Option Explicit“. Zum schnellen Testen deaktiviere oder lösche doch diese Zeile. Wenn alles funktioniert und „Option Explicit“ wieder aktiv ist, musst Du alle Variablen des Makros dimensionieren. Das geht so: Du fügst in Deinem Makro neu Zeilen 3 und 4 ein:

Sub SpalteE()
' Formel - in Spalte E
Dim ftabelle1$, fzelle$, ftabelle4$, fpfad$, fpfad1$
Dim rlast%, k%, yy%
und dann weiter mit:
ftabelle1 = Range("Hinweise!A28").Value
usw.

Grüsse Niclaus

Super, funtioniert!

Welche Parameter müsste man dann ändern, um in Zukunft ggf nicht mehr in „E“ ausgeben zu lassen sondern
z.B. in „C“ oder so…?
Die Änderung der Ausgabe nach „E“, könnte je nachdem wie ich mir die Datei auf dauer zurecht stricke, notwendug werden. Oder vielleicht werde ich mir auf diese Weise auch noch weitere Daten laden um u.U. Statistiken zu ziehen.

Vielen, vielen Dank und Gruß TB

Welche Parameter müsste man dann ändern, um in Zukunft ggf nicht mehr in „E“ ausgeben zu lassen sondern z.B. in „C“ oder so…?

Die Spalte wird in der folgenden Zeile bestimmt:

Cells(k, 5).Formula = "='" & fpfad1
      5 = Spalte E  /  3 = Spalte C usw.

.
vielleicht werde ich mir auf diese Weise auch noch weitere Daten laden um u.U. Statistiken zu ziehen.

Das ist ohne weiteres möglich. Ich habe dazu das Makro neu geschrieben. Damit das Ganze übersichtlicher wird, habe ich die Variablen neu benannt:

Dim qTabelleE$, qZelleE$, qTabZelleE$, qPfadE$
    qTabelleE   bedeutet: Die Quell-Tabelle für den Wert in Spalte E
    qZelleE     Die Zell-Adresse dieser Quell-Tabelle für den Wert in Spalte E
    qTabZelleE  Tabelle und Zelladresse im richtigen Format
    qPfadE      Der ganze Pfad, der für den Bezug in Spalte E nötig ist

So könnte es einfacher und übersichtlicher werden, wenn weitere Bezüge in andere Spalten aufgenommen werden sollten. Es hiesse dann z. B. qTabelleC$, qZelleC$ usw.

Viel Erfolg!
Grüsse Niclaus

Sub SpalteE()
' Formel - in Spalte E und andern Spalten
Dim qTabelleE$, qZelleE$, qTabZelleE$, qPfadE$
Dim fpfad$
Dim rlast%, k%, yy%
Sheets(1).Select
    If Sheets(1).Name = "Hinweise" Then Exit Sub
Application.Wait Now + TimeSerial(0, 0, 1) 
' wartet, bis Sheets(1) aktiviert ist

qTabelleE = Range("Hinweise!A28").Value
qZelleE = Range("Hinweise!A29").Value
qTabZelleE = qTabelleE & "'!" & qZelleE

rlast = Range("A1").SpecialCells(xlCellTypeLastCell).Row
For k = 2 To rlast
On Error GoTo fehler1
        fpfad = Cells(k, 1)
        yy = Len(fpfad) - Len(Application.Substitute(fpfad, "\", ""))
        qPfadE = Application.Substitute(fpfad, "\", "\[", yy) & "]" & qTabZelleE
        Cells(k, 5).Formula = "='" & qPfadE
fehler1:
If Err.Number <> 0 Then
        Cells(k, 5).Formula = "KEIN BEZUG !!!"
        Err.Number = 0  ' ist nicht n?tig, Err.Number
                        ' wird automatisch auf 0 gesetzt (??)
        Resume Next
End If
Next
End Sub

Ist es auf diese Weise prinzipiell auch Zellenbereiche abzufragen?

Also zb. „lies zellen A1 - Z1 und schreibe diese in A10 - Z10“.

Ja, das ist auch möglich. Aber Dein Beispiel von „A1:Z1 nach A10:Z10“ irritiert mich. In der Zieltabelle stehen doch in Spalte A die Pfad-Namen der Dateien, aus denen die Werte geholt werden sollen. Die Spalte A ist dafür reserviert. Spalte B enthält das Aenderungsdatum der entsprechenden Dateien. Und in Spalte C wolltest Du doch das Druck-Symbol eingefügt haben und in Spalte E irgendeinen andern Wert. In diese Spalten kannst Du doch nicht irgendetwas anderes einfügen!

Mach doch bitte realistische Beispiele! Zum Beispiel: von „A1:Z1“ nach „F2 : AE2“. Erst dann lohnt es sich, irgendein Makro dafür zu schreiben.

Ok, dann möchte ich im sheet „Anwesenheit“ die Zellen C9 - AG9 einlesen und wie gehabt, hinter der entsprechenden Datei in die Spalten „V“ - „AZ“ schreiben.
:grin:

Ok, dann möchte ich im sheet „Anwesenheit“ die Zellen C9 - AG9 einlesen und wie gehabt, hinter der entsprechenden Datei in die Spalten „V“ - „AZ“ schreiben.

Nach dem bisherigen muss das anders lauten:
Ich möchte aus dem sheet „Anwesenheit“ die Zellen C9 – AG9 einlesen

Ich lade die Datei 00_Datei_Liste_V5.xlsm hoch.

Dateiliste_Version5

Dort gibst Du in der Tabelle „Hinweise“ in C34 den Namen der Quell-Tabelle ein.
In C35 : D35 den Zellbereich, der übernommen werden soll.
In C36 die Spalte in der Zieltabelle: Die Quell-Daten werden dann in die Zieldatei/Zieltabelle geschrieben und zwar nach rechts ab der Spalte, die Du in C36 festgesetzt hast.

In diese Spalte und die folgenden werden dann die Quell-Daten geschrieben.

Voraussetzung ist selbstverständlich, dass in Deinen „Kundendateien“ die entsprechende Quelltabelle „Anwesenheit“ vorkommt! Sonst gibt es sehr viele Fehlermeldungen. Es ist mir bisher nicht gelungen, diese zu unterdrücken.

Also das klappt jetzt alles echt super!
Vielen Dank dafür!!!
Eine Frage hätte ich dazu aber noch:
Ist es grundsätzlich so das in das erste sheet geschrieben wird, oder wäre es auch möglich im vorfeld zu definieren wo hingeschrieben werden soll?

Gruß aus dem sonnigen Franken

Also das klappt jetzt alles echt super!
Das freut mich.

Eine Frage hätte ich dazu aber noch: Ist es grundsätzlich so, dass in das erste sheet geschrieben wird, oder wäre es auch möglich, im Vorfeld zu definieren, wo hingeschrieben werden soll?

Möglich wäre das schon, aber das Vorfeld ist längst abgesteckt worden: Im April, als es zum ersten Mal um Dein Projekt ging, wurde das erste Sheet für die Auswertungen bestimmt. Nachträglich alle Makros (über ein Dutzend) durchzusehen und zu ändern, das ist sehr mühselig.

Grüsse Niclaus

Hallo, ich muss mich nochmal zurückmelden!

Ich arbeite nun schon eine weile zufrieden mit der Datei.
leider stoße ich nun doch immer wieder auf ein Problem.
Ich muss zur besseren Auswertung immer wieder mal Buttons oder Überschriften auf dem ersten Sheet platzieren.
Dazu wäre es extrem hilfreich wenn mir die ersten drei Zeilen frei zur Verfügung stehen würden.
Sprich, das beim anlegen und aktualisieren der Liste soll immer erst ab der Zeile vier geschrieben werden.
Kann mir jemand sagen wie ich dieses umsetzen kann?

Danke und Gruß TB

Hallo TB

> wenn mir die ersten drei Zeilen frei zur Verfügung stehen würden.

Lang, lang ist’s her! Ich habe dazu eine Version 6 hochgeladen:

DateiListe_Version6

Neu habe ich bei den beiden Makros „Verknüpfungen Spalte E“ und „Verknüpfungen für mehrere Spalten“ ein zusätzliches Makro VerknLoeschen() eingerichtet. Damit werden - wenn man die entsprechende Rückfrage akzeptiert - alle Verknüpfungen der Datei gelöscht. Es gibt sonst eine Unmenge nicht (mehr) benötigter Verknüpfungen. Das musst Du aber gut testen, weil ich nicht weiss, ob Du auch Verknüpfungen hast, die Du unabhängig von den beiden Makros eingerichtet hast.

Grüsse N