Hi,
Das klingt ja fast so, als ob Du alle Deine Probleme gelöst hättest. Dann beglückwünsche ich Dich mal zu Deinem (kleinen) Erfolg mit Deinem "scheinbar" gut funktionierenden Code.
Aber so richtig ausführlich getestet hast Du ihn wohl noch nicht? Und meine Anmerkung zur "Position" der einzelnen CodeZeilen ist wohl auch nur mangelhaft gewesen. Zumindest hätte ich eine andere Umsetzung erwartet.
[*]Position
Für das "Abbrechen" hast Du das Problem ja auf den ersten Blick gelöst. Nur warum änderst Du zuerst die Zellen in der Selection, wenn der User noch die Möglichkeit zum Abbruch hat? Ich würde erst alle Userentscheidungen abwarten wollen, und erst dann die Werte/Zellen nach meinen Bedürfnissen manipulieren wollen. (Dann kann kein Usereingriff den Ablauf stören, und Du musst Dir (fast) keine Gedanken um das "Aufräumen" machen.)
Aus...
Sub Verlinkung_v4_Office2007()
Application.ScreenUpdating = False ' Bildschirmaktualisierung aus
Dim rngCell As Range
For Each rngCell In Selection
rngCell.Value = rngCell.Value & ".pdf"
Next
Dim StOrdner As String
Dim oSh As Object
Dim oFd As Variant
Dim nS As Object
Set oSh = GetObject("", "Shell.Application")
Set oFd = oSh.BrowseforFolder(0, _
"Bitte ein Verzeichnis auswählen ...", 0, "") 'Pfad übergeben
If oFd Is Nothing Then
EndOfSub
Exit Sub
End If
Set nS = oFd.Self
Set oSh = Nothing
StOrdner = nS.Path
SearchInFolder StOrdner ' Sub aufrufen
Cells.Replace What:=".pdf", Replacement:="", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False ' ".pdf" löschen
End Sub
...könnte also...
Sub Verlinkung_v4_Office2007()
Application.ScreenUpdating = False ' Bildschirmaktualisierung aus
Dim rngCell As Range
Dim StOrdner As String
Dim oSh As Object
Dim oFd As Variant
Dim nS As Object
Set oSh = GetObject("", "Shell.Application")
Set oFd = oSh.BrowseforFolder(0, _
"Bitte ein Verzeichnis auswählen ...", 0, "") 'Pfad übergeben
If oFd Is Nothing Then
' EndOfSub
Exit Sub
End If
For Each rngCell In Selection
rngCell.Value = rngCell.Value & ".pdf"
Next
Set nS = oFd.Self
Set oSh = Nothing
StOrdner = nS.Path
SearchInFolder StOrdner ' Sub aufrufen
Cells.Replace What:=".pdf", Replacement:="", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False ' ".pdf" löschen
End Sub
...werden. Wie Du siehst, habe ich die
For Each-Schleife nur hinter den Dialog geschoben. Bricht der User den Dialog ab, benötigst Du das Sub EndOfSub nun nicht, da Du die Werte/Zellen ja noch nicht geändert hast.
(Das "Verschieben" des "Aufräumens" (
Cells.Replace What:...) aus dem (rekursiven) Sub
SearchInFolder heraus, zurück ins aufrufende Sub, hast Du aber gut selbst umgesetzt. So in etwa hatte ich mir das vorgestellt.)
[*]richtig getestet 1
Hast Du im "Ordner suchen"-Dialog schon einmal den Eintrag "Arbeitsplatz", "Netzwerkumgebung" oder "Papierkorb" angewählt und einen Klick auf "OK" folgen lassen? ;-) Daher schrieb ich:
Das ist nicht alles, was es abzufangen gilt, für einen Test reicht es aber.
Da es diese Einträge gibt, wird irgendwann auch ein User diese Anwählen und auf Ok klicken. Und wenn es nur aus Versehen ist. ;-)
[*]richtig getestet 2
Bist Du Dir sicher, dass Du die doppelten Dateien richtig abfängst? Mach Dir doch einmal ein kleines Testverzeichnis mit 2 bis 3 einfach, aber eindeutig benannten PDFs. In diesem Verzeichnis bring dann auch einmal eine Datei "zzz.txt" unter. Nun noch ein Untervereichnis mit 2-3 PDFs. Ein PDF nur im Hauptverzeichnis, eines nur im Unterverzeichnis, eines in beiden Verzeichnissen. Dann evtl. noch je ein PDF in jedem Verzeichnis welches nicht in der Liste (Tabelle/Selection) ist. Nun noch eine kleine Testmappe gebastelt, welche die Dateinamen aufnimmt. Nun lass mal Deinen Code laufen. Passt dann die Meldung bei doppelten Dateien? Zumindest bei mir wird dann die "zzz.txt" als doppelt ausgewiesen, obwohl nur ein einziges Mal vorhanden und zu allem Überfluss auch gar kein Link dafür gefordert wird, denn Du möchtest ja nur PDFs verlinken.
Ich möchte Dir Dein Erfolgserlebnis nicht nehmen oder gar madig machen, nur wollt ich das, was mir auffällt auch nicht unerwähnt lassen. ;-)
bye
malSchauen
... der sich am Wochenende, wenn er Zeit findet, mal an eine eigene Umsetzung machen wird...