Hi,
@C.Edel
...sind isses perfekt.
Von "perfekt" bist Du mit dem Code mMn noch weit entfernt. ;-) Aber da Du Ausdauer beweist, und auch eigene Ideen einbringst, glaube ich zu erkennen, dass Du selbst auch ein klein wenig Spass an der Sache hast. Wenn dem so ist, und Du, wie ich es hier gelesen habe als Azubi, keinen wirklichen Zeitdruck bei der Sache hast, dann können wir gern mit den Denkansätzen zu Deiner eigenen Lösung weitermachen. (Kann beim lernen von VBA, wenn Du denn willst, evtl. hilfreicher sein, als eine laufende "Komplettlösung" die Du evtl. nicht durchschaust.)
[*] zu Deinem Problem mit der Trickserei in der Selection:
Dim cell As Range
For Each cell In Selection
ActiveCell.Value = ActiveCell.Value & ".pdf"
ActiveCell.Offset(1, 0).Range("A1").Select
Next
Range("A:Z").Select
Du musst Dich nicht wundern, ...
dass er meine markierung verliert. Du setzt ja mit
.Select jeweils eine neue "Markierung". Nun kann man in den allermeisten Fällen auf
.Select und auch auf
.Activate verzichten. Tipps dazu findest Du z.B.
hier. Und um dann auch mal zu sehen und zu durchschauen, was welche Zeile im Code denn für Auswirkungen auf Deine Mappe hat, könnte evtl.
dieses Tutorial hilfreich sein.
Um hier dann mal bei Deiner "Trickserei" zu bleiben, schau doch mal was passiert, wenn Du obigen CodeSchnippsel durch folgendes ersetzt:
Dim rngCell As Range
For Each rngCell In Selection
rngCell.Value = rngCell.Value & ".pdf"
Next
' Range("A:Z").Select
Mit
For Each sprichst Du in diesem Fall ja schon jede Zelle in der Selection EINZELN an. Du musst sie, um etwas damit anzustellen nun nicht auch noch aktivieren oder selectieren, und Deine ursprüngliche Auswahl sollte erhalten bleiben. (Somit brauchst Du dann auch nicht A:Z komplett selectieren. Daher ist die CodeZeile auskommentiert).
[*] das Nächste
Aus irgenteinem Grund, bricht der das untersuchen von Unterordnern ab sobald er eine Datei findent
Dazu musst Du Dir die "Position" der einzelnen CodeZeilen und deren Auswirkungen im Ablauf mal vor Augen führen. Nun ist es beim rekursiven Aufruf einer Sub bei den ersten Programmier-"Versuchen" für Dich evtl. nicht ganz einfach zu durchschauen, was ich damit meine. Daher möchte ich das an obigem CodeSchnippsel mal deutlich machen:
Du hast mMn eh schon ein Problem mit dem Code aus #27, wenn der User im "Ordner suchen" Dialog auf "Abbrechen" klickt. (Schon mal gemacht?) Du solltest einen Laufzeitfehler ernten (LZF91). Der User hat den Button, und irgendwann klickt da auch mal einer drauf. Für einen Test fang diesen Fehler einmal ab wie folgt:
Set oFd = oSh.BrowseforFolder(0, _
"Bitte ein Verzeichnis auswählen ...", 0, "") 'Pfad übergeben
If oFd Is Nothing Then Exit Sub
Set nS = oFd.Self
Das ist nicht alles, was es abzufangen gilt, für einen Test reicht es aber. Nun wähle Deine Zellen mal aus und starte Dein Makro. Klicke nun bei der OrdnerWahl mal auf "abbrechen". Mach das ganze mal so 2, 3 oder auch 10 mal, und schaue was aus den Werten (Dateinamen) in den ausgwählten Zelle wird.
Nicht so schön, oder?
Beim Unterordner-"Problem" dürfte es ähnlich sein.:
Da
For Each FD In EachFold
' Funktion rekursiv aufrufen weitere Unterverzeichnisse
SearchInFolder CStr(FD)
Next FD
im CodeAblauf vor
For Each FI In EachFil ' Schleife über alle Dateien
' Prüfen ob Dateiname im Bereich
Set RaFound =...
kommt, werden zuerst die Unterverzeichnisse untersucht. Im ersten Unterverzeichnis werden nun die Dateien auf "Treffer" hin untersucht. Treffer in diesem Unterverzeichnis werden wohl auch verlinkt, nehme ich an, ohne es getestet zu haben. Nun sind alle Dateien im Unterverzeichnis durchsucht. Du bist mit Dem Code also gerade im Sub
SearchInFolder in der Zeile mit dem Code
Next FI. Dabei bist Du im ersten Unterverzeichnis des ausgewählten Verzeichnisses. Und was passiert nun? Mit
Cells.Replace What:=".pdf", ... machst Du nun Deine "Trickserei" an dieser Stelle rückgängig. Du entfernst also das .PDF in (mMn ALLEN) Zellen. War es nur ein Untervereichnis, dann durchsuchst Du nun die Dateien im "ausgewählten" Verzeichnis. In Deinen Zellen fehlt nun aber schon wieder das .PDF=> kein Treffer/Link mehr.
Siehe oben: "rekursive Aufrufe" sind anfangs evtl. nicht leicht zu durchschauen, aber besser kann ich es leider nicht erklären.
Aber evtl. hilft es Dir ja, Dich einer EIGENEN Lösung weiter anzunähern, wenn Du denn die Zeit dafür investieren kannst/möchtest. Ist dem nicht so, dann kläre mal die Themen und Rückfragen die bisher auftauchten (Unterverz.?, was soll bei MehrfachTreffern passieren etc.) und es findet sich hier sicher eine Lösung im Forum. Wobei die dann wohl auch keinen Anspruch auf Perfektion haben wird. ;-)
soweit fürs Erste
malSchauen