Hyperlinks in Spalte ersetzen

  • Excel

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Tony-S.

    Hyperlinks in Spalte ersetzen

    Hallo Forum,

    ich brauche mal eure Hilfe :)
    und zwar geht es darum, eine Excel-Arbeitsmappe als CSV zu speichern getrennt mit ";" - das geht auch schon.
    Ich habe in der Excel-Arbeitsmappe eine Spalte (immer nur eine z. B. "B") in der nur Hyperlinks sind.
    Diese Hyperlinks muss ich durch html a-Tags ersetzen, also so: <a href"www.google.de">google.de</a>.
    Meine Idee war, einfach nach "www" oder "http" zu suchen und die Zelle dann entsprechend anzupassen aber da es auch Hyperlinks (eigentlich nur) sind, funktioniert das so nicht. Meine nächste Idee war über ".Hyperlinks.Delete" den Link zu löschen, so dass nun nur noch Text da steht - geht ebenso nicht.

    Als nächstes habe ich versuch zu prüfen ob eine Zelle einen Hyperlink enthält und da hängt es bei mir.
    Ich brauche VBA eigentlich nur selten, wäre nett wenn mir jemand erklären kann, was zu tun ist und warum :)
    Der Fehler der auftritt, ist: "Index außerhalb des gültigen Bereichs", damit kann ich nicht so recht etwas anfangen. (in Zeile '<<<<<)

    MfG Tony

    Visual Basic-Quellcode

    1. 'Speichern mit ";" als Trennzeichen
    2. Sub SaveCSVSemicolon()
    3. Dim rngBereich As Range
    4. Dim rngZeile As Range
    5. Dim rngZelle As Range
    6. Dim strTemp As String
    7. Dim strPfad As String
    8. strPfad = ThisWorkbook.Path + "\"
    9. Const strDateiname As String = "csv2_file"
    10. Const strErweiterung As String = ".csv"
    11. Const strTrennzeichen As String = ";"
    12. Set rngBereich = ActiveSheet.UsedRange 'Nur die benutzten Zellen
    13. Open strPfad & strDateiname & strErweiterung For Output As #1
    14. For Each rngZeile In rngBereich.Rows
    15. For Each rngZelle In rngZeile.Cells
    16. 'Zellen, die ein "www" oder "http(s)" beinhalten in html a-Tags ändern
    17. If ((InStr(1, rngZelle.Text, "www") > 0) Or (InStr(1, rngZelle.Text, "http") > 0)) Then
    18. strTemp = strTemp & "<a href=""" & CStr(rngZelle.Text) & """>" & CStr(rngZelle.Text) & "</a>;"""
    19. 'Zellen, die einen Hyperlink enthalten ebenfalls ändern
    20. ElseIf (rngZelle.Hyperlinks(1).Count > 0) Then '<<<<<
    21. strTemp = strTemp & "<a href=""" & CStr(rngZelle.Hyperlinks(1).Address) & """>" & CStr(rngZelle.Hyperlinks(1).Address) & "</a>;"""
    22. 'Alle anderen Zellen nicht ändern
    23. Else
    24. strTemp = strTemp & CStr(rngZelle.Text) & strTrennzeichen
    25. End If
    26. Next
    27. Print #1, strTemp
    28. strTemp = ""
    29. Next
    30. Close #1
    31. Set rngBereich = Nothing
    32. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Tony-S“ ()

    Hm hab es nun doch hinbekommen und es war, wie so oft,
    relativ einfach. Anstatt nach "www" oder "http(s)" zu suchen, suche ich nun nur noch nach Hyperlinks (wir gehen einfach mal davon aus, dass jede Zelle mit "www" oder "http(s)" auch ein Hyperlink ist). Ich gehe dazu wieder jede Zeile zellenweise durch und prüfe mit "Hyperlinks.Count" ob denn ein Hyperlink vorhanden ist, wenn ja wird dieser mit einem a-Tag umschlossen.

    Visual Basic-Quellcode

    1. Option Explicit
    2. 'Die folgende Prozedur speichert die geöffnete Arbeitsmappe in ein Simikolon getrenntes CSV-Dokument.
    3. 'Vorhandene Hyperlinks werden durch <a>-Tags ersetzt --> <a href="www.google.de">Google</a>
    4. Sub SaveCSV()
    5. Dim rngBereich As Range
    6. Dim rngZeile As Range
    7. Dim rngZelle As Range
    8. Dim strTemp As String
    9. Dim strPfad As String
    10. Dim strURL As String
    11. strPfad = ThisWorkbook.Path + "\" 'Speicherpfad, ist der Pfad in dem die Arbeitsmappe liegt
    12. Const strDateiname As String = "csv_file" 'Dateiname
    13. Const strErweiterung As String = ".csv" 'Dateierweiterung
    14. Const strTrennzeichen As String = ";" 'Trennzeichen
    15. Set rngBereich = ActiveSheet.UsedRange 'Nur die benutzten Zellen werden als Bereich genutzt
    16. Open strPfad & strDateiname & strErweiterung For Output As #1 'Datei öffnen
    17. For Each rngZeile In rngBereich.Rows
    18. For Each rngZelle In rngZeile.Cells
    19. 'Wenn ein Hyperlink gefunden wurde
    20. If rngZelle.Hyperlinks.Count > 0 Then
    21. strURL = "<a href=" & Chr(34) & rngZelle.Hyperlinks(1).Address & Chr(34) & ">" & rngZelle.Value & "</a>" & strTrennzeichen
    22. strTemp = strTemp & strURL
    23. 'Wenn kein Hyperlink gefunden wurde (alle anderen Inhalte)
    24. Else
    25. strTemp = strTemp & CStr(rngZelle.Text) & strTrennzeichen
    26. End If
    27. Next
    28. Print #1, strTemp 'Zeilenweise in Datei schreiben
    29. strTemp = ""
    30. Next
    31. Close #1 'Datei schließen
    32. Set rngBereich = Nothing
    33. End Sub


    Hoffentlich hilft das mal jemanden ;)