Hyperlink.Add wandelt UNC Pfad automatisch um

  • Excel

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von FireEmerald.

    Hyperlink.Add wandelt UNC Pfad automatisch um

    Hallo Zusammen,

    aktuell füge ich mit folgendem Code einen Hyperlink in eine aktive Zelle/Auswahl ein:

    Visual Basic-Quellcode

    1. '// Hyperlink erstellen
    2. ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=UncFilepathWithoutExtension & ".7z", TextToDisplay:=Filename​


    Die Variable UncFilepathWithoutExtension enthält immer einen UNC Pfad, Beispiel: "\\server01\folder01\folder02\file" & ".7z".
    Funktioniert auch alles ohne Probleme, nur liegt die Exceldatei in dem Pfad: "\\server01\folder01" wodurch der erstellte Hyperlink welcher sich dann in der Zelle befindet so aufbaut:

    "folder02/file.7z" - Excel wandelt ihn automatisch um.

    Wie ist es möglich Excel zu sagen, dass es doch bitte den UNC Pfad in der Zelle hinterlegen soll und nicht nur 50% des ganzen Links?

    Gruß
    Hyperlink.Address speichert sehr wohl den UNC-Pfad.
    Geht es dir um die Anzeige in der Zelle, also den Zellinhalt?
    Den bestimmst du mit TextToDisplay.
    Was steht denn bei dir in "Filename"?

    Edit: Ist das ein ".XLS" oder ein ".XLSX"?

    Edit2: Du kannst mit den Excel-Einstellungen spielen
    Datei … Optionen… Erweitert
    Block Allgemein .. Button Weboptionen
    Tab Dateien
    Checkbox „Links beim Speichern aktualisieren“

    Oder du packst die Verkknüpfung nicht in Worksheet.Hyperlinks, sondern als Formel in die Zelle
    ​ ActiveCell.Formula = "=HYPERLINK(""" & UncFilepathWithoutExtension & ".7z"",""" & Filename & """)"
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Auf meinem privaten PC (Excel 2013, 64bit) bekomme ich es aktuell um's verrecken nicht reproduziert.

    Im Prinzip ist die Codefunktion ähnlich aufgebaut wie diese: (zum testen einfach ausführen)

    Visual Basic-Quellcode

    1. Public Sub UpdateHyperlink()
    2. '// Nur für dieses Beispiel.
    3. If ThisWorkbook.Path = "" Then
    4. MsgBox "Speichern Sie die Datei ab."
    5. Exit Sub
    6. End If
    7. With Cells(1, 1)
    8. .Hyperlinks.Delete
    9. .Value = ""
    10. End With
    11. Dim UncFolderpath As String: UncFolderpath = ThisWorkbook.Path & "\Folder1"
    12. Dim Filename As String: Filename = "file.txt"
    13. Dim UncFilepathWithExtension As String: UncFilepathWithExtension = UncFolderpath & "\" & Filename
    14. '// Nur für dieses Beispiel.
    15. If Dir(UncFolderpath, vbDirectory) = "" Then
    16. MkDir UncFolderpath
    17. End If
    18. If Dir(UncFilepathWithExtension) = "" Then
    19. Open UncFilepathWithExtension For Output As #1
    20. Close #1
    21. End If
    22. '// Erstellen eines neuen Hyperlinks
    23. ActiveSheet.Hyperlinks.Add Anchor:=Range("A1"), Address:=UncFilepathWithExtension, TextToDisplay:=Filename
    24. MsgBox "Gespeicherter Hyperlink:" & vbCrLf & _
    25. UncFilepathWithExtension & vbCrLf & vbCrLf & _
    26. "Ausgelesener Hyperlink:" & vbCrLf & _
    27. Cells(1, 1).Hyperlinks(1).Address
    28. End Sub


    @petaod Die Exceldatei ist unter Excel 2010 als *.xlsm abgespeichert.
    @WhitePage Du hast was dies angeht glaube ich recht - kann es gerade nicht überprüfen, aber selbst wenn ich in meinem Beispiel die Zelle als Text formatiere funktioniert es richtig.

    Was mir gerade noch einfällt ist das das hinzufügen von Hyperlinks eigentlich über Blattschutz aktivieren, deaktiviert ist - aber auch mt der Sperre bekomme ich es nicht reproduziert.
    Ich kann es inzwischen reproduzieren.Das Ganze passiert beim Speichern der Datei.
    Da wird von absoluter Adressierung auf relative Adressierung umgestellt.

    Es hilft wohl wirklich nur die Modifikation der Excel-Optionen.
    Datei … Optionen… Erweitert
    Block Allgemein .. Button Weboptionen
    Tab Dateien
    Checkbox „Links beim Speichern aktualisieren“ deaktivieren

    Das hängt dann aber vermutlich nicht am Workbook, sondern an der Excel-Installation des Benutzers.
    Wenn du also mit mehreren Benutzern die Datei speicherst, musst du wahrscheinlich alle diese Benutzer so einstellen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @petaod Danke für die Information^^

    In meinem Anwendungsfall ist es jedoch nicht möglich alle Nutzer mit den passenden Einstellungen zu versorgen.
    Aus diesem Grund hab ich einfach eine Unterstützung für jede der drei aufgelisteten Möglichkeiten implementiert.

    Visual Basic-Quellcode

    1. '// Cases:
    2. '// #1: \\<server>\<folder>\<file>.<extension>
    3. '// #2: <folder>/<file>.<extension>
    4. '// #3: T:\<folder>\<file>.<extension>
    5. Dim FilepathWithExtension As String
    6. If Dir(<my_cell>).Hyperlinks(1).Address, vbHidden) <> "" Then
    7. '// #1 Der Dateipfad ist absolut (UNC-Pfad).
    8. FilepathWithExtension = Cells(<my_cell>).Hyperlinks(1).Address
    9. ElseIf Dir(ThisWorkbook.Path & "\" & Replace(Cells(<my_cell>).Hyperlinks(1).Address, "/", "\", 1, -1, vbTextCompare), vbHidden) <> "" Then
    10. '// #2 Der Dateipfad ist relativ zum Speicherort der Excel Datei.
    11. FilepathWithExtension = ThisWorkbook.Path & "\" & Replace(Cells(<my_cell>).Hyperlinks(1).Address, "/", "\", 1, -1, vbTextCompare)
    12. ElseIf Dir(GetUNCPath(Cells(<my_cell>).Hyperlinks(1).Address), vbHidden) <> "" Then
    13. '// #3 Der Dateipfad ist kein UNC-Pfad.
    14. FilepathWithExtension = GetUNCPath(Cells(<my_cell>).Hyperlinks(1).Address)
    15. Else
    16. '// Datei aus Hyperlink existiert nicht.
    17. MsgBox "Hyperlink at Row " & CStr(<my_row>) & " is invalid.", vbExclamation, "Error)"
    18. Exit Sub
    19. End If


    Gruß, FireEmerald