Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1752to1756
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

VBA suchen und verlinken

VBA suchen und verlinken
30.04.2020 11:08:03
MarC
Servus alle da draußen, ich habe zwei Fragen an euch und denke das ihr mir da bestimmt weiterhelfen könnt.
1. Ich habe eine Funktion die meine Ordner nach Begriffen durchsucht die in den Zellen stehen und diese dann verlinkt. Das funktioniert fast perfekt, doch leider bleibt die Funktion ab und an mit der Fehlermeldung Laufzeitfehler 5 stehen. Kann das an der anzahl der Suchbegriffe liegen oder an der Länge der Ordner + Länge des Dateinamen? In den Variablen steht die Zellenposition an der der Code stehen geblieben ist nur leider hilft mir das nicht weiter.
2. In manchen Zellen stehen zwei oder mehr Begriffe drin die durch ein Leerzeichen oder eine Zeile getrennt sind. Jeder Begriff steht für einen Dateinamen. Jetzt möchte ich wenn mehr als ein Begriff in der Zelle steht die Zelle mit dem Ordner in dem sich eine der Begriffe befindet verlinkt wird. Aktuell ist es so das nur Zellen verlinkt werden in denen sich ein Begriff befindet und auch nur dann wenn der Begriff bzw. Dateiname in einem Ordner gefunden wird. Könnte mir bitte jemand bei der Erweiterung helfen? Ich müsste praktisch prüfen ob mehr als ein Begriff drin steht wenn ja dann das wenn nicht dann das^^
Mein Code sieht aktuell so aus:
Sub Search_File()
Dim Retval As Long, TmpStr As String * 256
Dim lngZeile As Long
Dim lngSpalte As Long
Dim lngLetzte As Long
Dim Index As Integer
lngLetzte = Columns(2).Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious). _
Row
For lngZeile = 8 To lngLetzte
For lngSpalte = 5 To 8
If Cells(lngZeile, lngSpalte) = "" Then
Cells(lngZeile, lngSpalte).Interior.Color = 255
Else
Retval = SearchTreeForFile("\\C\blablabla, Cells(lngZeile, lngSpalte) & ".pdf",  _
TmpStr)
If Retval = 0 Then
Cells(lngZeile, lngSpalte).Interior.Color = 14474460
Else
Cells(lngZeile, lngSpalte).Hyperlinks.Add Anchor:=Cells(lngZeile, lngSpalte) _
, Address:=TmpStr, TextToDisplay:=Cells(lngZeile, lngSpalte).Value
End If
End If
Next lngSpalte
Next lngZeile
End Sub

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA suchen und verlinken
30.04.2020 21:17:37
fcs
Hallo MarC,
zu 1.
soweit ich feststellen konnte wird der Wert 0 zurückgegeben, wenn Pfad+Dateiname zu lang lang sind. In Summe dürfen es nicht mehr als 256 Zeichen sein.
Wann Fehler 5 auftritt: ?
zu 2.
falls bei der Suche nach einer Datei mit dem Text in der Zelle nichts gefunden wird (Rückgabewert =0), dann muss der Zellinhalt ggf. am " " oder der Zeilenschaltung (Zeichen Chr(10)) gesplittet werden .
Danach muss dann die Suche in einer Schleife für alle Texte wiederholt werden.
Bei Erfolg muss dann vom zurückgegeben Pfad+Dateiname der Dateiname wieder abgetrent werden, um den Link auf den Ordner setzen zu können.
Hoffe meine Anpassungen/Ergänzungen erfüllen alle Wünsche.
LG
Franz
Private Declare Function SearchTreeForFile Lib "imagehlp.dll" ( _
ByVal RootPath As String, _
ByVal InputPathName As String, _
ByVal OutputPathBuffer As String) As Long
Sub Search_File()
Dim Retval As Long, TmpStr As String * 256
Dim lngZeile As Long
Dim lngSpalte As Long
Dim lngLetzte As Long
Dim Index As Integer
Dim strPfad As String
Dim varNamen
Dim strName As String
Dim bolRetval As Boolean
Dim varItem
lngLetzte = Columns(2).Find(What:="*", SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
strPfad = "\\C\blablabla"
For lngZeile = 8 To lngLetzte
For lngSpalte = 5 To 8
TmpStr = ""
If Cells(lngZeile, lngSpalte) = "" Then
Cells(lngZeile, lngSpalte).Interior.Color = 255
Else
bolRetval = False
strName = Cells(lngZeile, lngSpalte).Text
Retval = fncSearchfile(strPfad, strName & ".pdf", TmpStr)
If Retval = 0 Then
bolRetval = False
If InStr(strName, " ") > 0 Then 'Leerzeichen im Zellinhalt
varNamen = Split(strName, " ")
For Each varItem In varNamen
If fncSearchfile(strPfad, varItem & ".pdf", TmpStr) = 1 Then
'Dateiname rückgegebenen vom Pfad abtrennen
TmpStr = Left(TmpStr, InStrRev(TmpStr, "\") - 1)
bolRetval = True
Exit For
End If
Next varItem
ElseIf InStr(strName, Chr(10)) > 0 Then 'Zeilenschaltungen im Zellinhalt
varNamen = Split(strName, Chr(10))
For Each varItem In varNamen
If fncSearchfile(strPfad, varItem & ".pdf", TmpStr) = 1 Then
'Dateiname rückgegebenen vom Pfad abtrennen
TmpStr = Left(TmpStr, InStrRev(TmpStr, "\") - 1)
bolRetval = True
Exit For
End If
Next varItem
End If
Else
bolRetval = True
End If
If bolRetval = True Then
ActiveSheet.Hyperlinks.Add Anchor:= _
Cells(lngZeile, lngSpalte), Address:=TmpStr, _
TextToDisplay:=Cells(lngZeile, lngSpalte).Text
Else
Cells(lngZeile, lngSpalte).Interior.Color = 14474460
End If
End If
Next lngSpalte
Next lngZeile
End Sub
Function fncSearchfile(ByVal sPfad, ByVal sName, ByRef stemp As String) As Integer
fncSearchfile = SearchTreeForFile(sPfad, sName, stemp)
End Function

Anzeige
AW: VBA suchen und verlinken
01.05.2020 18:52:43
MarC
Hallo Franz. Danke für die Änderung des Codes und deine ausführliche Erklärung. Den Code kann ich erst am Montag in der Arbeit testen ich würde mich dann nochmal melden. Aber vielen Dank schon mal.
Die oben beschriebene Fehlermeldung tritt bei mir an unterschiedlichen Positionen auf. In einer Zelle habe ich ein Leerzeichen am Ende des Begriffs entdeckt und seit dem tritt das Problem zumindestens da nicht mehr auf. Vll ist das bei den anderen so ähnlich.
Gruß MarC

313 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige