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

Relativer Hyperlink mit VBA

Relativer Hyperlink mit VBA
05.03.2009 10:25:55
Stefan
Hallo Excel-Profis,
ich möchte gerne einen Hyperlink mit VBA erzeugen, dessen Pfad relativ zu der Excel-Tabelle ist, in der der Link platziert wird. Wenn ich den Hyperlink mit
ActiveSheet.Hyperlinks.Add Anchor:=ActiveCell, Address:=Application.GetOpenFilename, ScreenTip:= _
"Gehe zu Verwenderhinweis"
erzeuge wird der Pfad absolut angelegt.
Kennt jemand vielleicht eine Alternative zu GetOpenFilename, bei der der relative Link erzeug wird oder irgendein Trick, mit dem man den Link nachträglich in das gewünschte Format bringen kann?
Gruß Stefan

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Relativer Hyperlink mit VBA
05.03.2009 11:03:23
Tino
Hallo,
mach es doch gleich über den entsprechenden Dialog.
Application.Dialogs(xlDialogInsertHyperlink).Show
Der Link wird in der Avtiven Zelle erstellt.
Gruß Tino
AW: Relativer Hyperlink mit VBA
05.03.2009 11:36:09
Stefan
Hallo Tino,
gibt es dabei auch die Möglichkeit, den ScreenTip bzw. QuickInfo automatisch einzutragen?
Gruß Stefan
Nein, dieser Dialog hat keine Optionen. oT.
05.03.2009 11:48:42
Tino
AW: Nein, dieser Dialog hat keine Optionen. oT.
05.03.2009 13:21:54
Stefan
Hallo,
also wenn der Link relativ erzeugt wird steht unter "Dateityp oder Webseite" z.B. "Verwenderhinweise_BMW/N55_ApplSG.doc". Wenn ich das Verzeichnis, in dem die Excel-Datei liegt, mitsamt Unterordner auf CD brenne funktionieren die Links immernoch.
Wenn ich den Link absolut erzeuge steht da "\\st77x21\daten\pcdaten\Gruppe\TEV\Motoren\Verwenderhinweise_BMW/N55_ApplSG.doc". Dieser Link funktioniert dann nur, wenn alle Dateien auf dem Netzlaufwerk liegen.
Das Problem hat sich aber erledigt, da Excel jetzt plötzlich doch alle relativ anlegt.
Damit bleibt für mich nur noch die Frage, wie ich den QuickInfo-Text in den Link bekomme. Gibt's da noch irgendein Hintertürchen?
Gruß Stefan
Anzeige
AW: Nein, dieser Dialog hat keine Optionen. oT.
05.03.2009 13:34:45
Tino
Hallo,
Du könntest Dir höchstens einen eigenen Dialog Bauen und
den relativen Pfad selbst zusammenbastel. (ob das Sinn macht, weis nicht)
Sonst habe ich jetzt keine Idee,
müsste mal über Google suchen ob es eine Funktion dafür gibt,
die den absoluten Pfad in einen relativen verwandelt.
Gruß Tino
mit einer Api Funktion
05.03.2009 14:08:49
Tino
Hallo,
habe etwas gefunden mittels Api.
Versuche es mal so, nicht ausgiebig getestet.
'Benötigte Konstanten 
Private Const MAX_PATH = 260
Private Const FILE_ATTRIBUTE_DIRECTORY = &H10
Private Const FILE_ATTRIBUTE_NORMAL = &H80
'API-Funktion deklarieren 
Private Declare Function apiPathRelativePathTo Lib "shlwapi.dll" _
  Alias "PathRelativePathToA" (ByVal pszPath As String, _
  ByVal pszFrom As String, ByVal dwAttrFrom As Long, _
  ByVal pszTo As String, ByVal dwAttrTo As Long) As Long

Public Function GetRelativePath(PathFrom As String, PathTo As String) As String
  Dim pszPath As String
  pszPath = Space(MAX_PATH)
  'API-Funktion aufrufen 
  apiPathRelativePathTo pszPath, PathFrom, _
    FILE_ATTRIBUTE_DIRECTORY, PathTo, FILE_ATTRIBUTE_NORMAL
  'Rückgabe des relativierten Pfads 
  GetRelativePath = Left$(pszPath, InStr(pszPath, Chr(0)) - 1)
End Function


Sub Test()
Dim sPathGrund As String
Dim DateiName As String
Dim sPath As String
Dim sHyperlink As String

sPath = ThisWorkbook.Path
DateiName = Application.GetOpenFilename
sHyperlink = GetRelativePath(sPath, DateiName)

ActiveSheet.Hyperlinks.Add Anchor:=ActiveCell, Address:=sHyperlink, ScreenTip:="Gehe zu Verwenderhinweis"
End Sub


Gruß Tino

Anzeige
AW: mit einer Api Funktion
05.03.2009 14:37:33
Stefan
Hallo Tino,
das funktioniert einwandfrei! Um zu verstehen, was das genau abläuft werde ich wohl noch ein paar Schulungen brauchen...
Vielen Dank für die Hilfe!
Stefan
Korrektur !! ?
05.03.2009 16:51:21
Ramses
Hallo
Sorry,... aber da fehlt da nicht doch noch was. Sonst wird ja nur eine leere Zelle angelegt
ActiveSheet.Hyperlinks.Add Anchor:=ActiveCell, Address:=sHyperlink, TextToDisplay:=sHyperlink, ScreenTip:="Gehe zu Verwenderhinweis"
Gruss Rainer
AW: Korrektur !! ?
05.03.2009 17:10:39
Tino
Hallo,
kommt darauf an was der Anwender haben möchte,
wenn TextToDisplay nicht angegeben wird, wird der Hyperlink angezeigt.
Gruß Tino
Anzeige
AW: Korrektur !! ?
05.03.2009 17:24:16
Ramses
Hallo Tino
"...wenn TextToDisplay nicht angegeben wird, wird der Hyperlink angezeigt.."
Keine Ahnung was da passiert ist,.. ich habe das auch nur geschrieben, weil bei mir zwar die Quickinfo angezeigt wurde, aber in der Zelle nichts drin stand und der Hyperlink nicht funktionierte.
Nach speichern der Mappe und nochmaligem ausführen des Makros steht nun auch der Text in der Zelle.
keine Ahnung warum
Gruss Rainer
AW: Korrektur !! ?
05.03.2009 17:32:29
Tino
Hallo,
hattest Du die Datei nicht gespeichert? War diese Jungfräulich?
Dann ist ThisWorkbook.Path leer, Datei muss zuvor am Bestimmungsort gespeichert sein.
Sonst wird es wahrscheinlich einer dieser Akte- X Fälle sein. ;-)
Gruß Tino
Anzeige
AW: Korrektur !! ?
05.03.2009 18:23:09
Ramses
Hallo
Ja, die Mappe war jungfräulich, dennoch:
Die relative Anzeige müsste eigentlich aus dem Link zur ZIELDATEI resultieren und nîcht aus dem Pfad der aktiven Arbeitsmappe.
Schliesslich wird mit "TextTodisplay:=sHyperlink" der korrekte Pfad/Link angezeigt
Gruss Rainer
AW: Korrektur !! ?
05.03.2009 18:52:10
Tino
Hallo,
leider nicht, der Hyperlinkpfad bleibt leer warum auch immer.
Gruß Tino
Sicherheit
05.03.2009 19:39:36
Tino
Hallo,
habe mal etwas getestet, GetRelativePath bleibt leer,
wenn der Pfad nicht gekürzt werden kann.
Müssen wir noch etwas einbauen, jetzt sollte es funzen.

Option Explicit
'Benötigte Konstanten
Private Const MAX_PATH = 260
Private Const FILE_ATTRIBUTE_DIRECTORY = &H10
Private Const FILE_ATTRIBUTE_NORMAL = &H80
'API-Funktion deklarieren
Private Declare Function apiPathRelativePathTo Lib "shlwapi.dll" _
Alias "PathRelativePathToA" (ByVal pszPath As String, _
ByVal pszFrom As String, ByVal dwAttrFrom As Long, _
ByVal pszTo As String, ByVal dwAttrTo As Long) As Long
Public Function GetRelativePath(PathFrom As String, PathTo As String) As String
Dim pszPath As String
pszPath = Space(MAX_PATH)
'API-Funktion aufrufen
apiPathRelativePathTo pszPath, PathFrom, _
FILE_ATTRIBUTE_DIRECTORY, PathTo, FILE_ATTRIBUTE_NORMAL
'Rückgabe des relativierten Pfads
GetRelativePath = Left$(pszPath, InStr(pszPath, Chr(0)) - 1)
If GetRelativePath = "" Then GetRelativePath = PathTo
End Function
Sub Test()
Dim sPathGrund As String
Dim DateiName As String
Dim sPath As String
Dim sHyperlink As String
sPath = ThisWorkbook.Path
DateiName = Application.GetOpenFilename
sHyperlink = GetRelativePath(sPath, DateiName)
ActiveSheet.Hyperlinks.Add Anchor:=ActiveCell, Address:=sHyperlink, ScreenTip:="Gehe zu  _
Verwenderhinweis"
End Sub


Gruß Tino

Anzeige
AW: Relativer Hyperlink mit VBA
05.03.2009 11:48:46
Ramses
Hallo
"...bei der der relative Link erzeug ..."
Was verstehst du unter "relativ" !
Es gibt in EXCEL keinen relativen Hyperlink. Ist die Datei nicht am vorgesehenen Ort, oder wird der Hyperlink aus einem anderen Verzeichnis heraus gestartet mit einem Link zum übergeordneten Verzeichnis das anders heisst, dann geht der Link ins Leere.
Hyperlinks wie auf einer Website ala "..\Datei.xxx" werden nicht unterstützt
Gruss Rainer
stimmt Du hast recht...
05.03.2009 12:03:34
Tino
Hallo,
, habe es eben Durchgespielt.
Beim erstellen eines Hyperlinks z. Bsp. zu einem Übergeordneten Ordner wird zwar
..\Dateiname angezeigt, aber der Pfad ist dennoch absolut.
Gruß Tino
Anzeige
AW: Relativer Hyperlink mit VBA
05.03.2009 12:40:10
Tino
Hallo,
jetzt habe ich doch Quatsch geschrieben.
Der Pfad ist doch relativ.
Angenommen, ich habe einen Stick der ist an dem einen Rechner Laufwerk W:
und an einem anderen H:, dann funktioniert das schon.
Gruß Tino
AW: Relativer Hyperlink mit VBA
05.03.2009 13:28:34
Ramses
Hallo Tino
"...dann funktioniert das schon..."
Auf welche Datei ist der Hyperlink gesetzt, bzw. wie sieht deine Ordnerstruktur dann aus ?
Stellt sich die Frage, ob das Windows bei den temporären Laufwerken nicht etwas Unterstützung bietet.
Gruss Rainer
AW: Relativer Hyperlink mit VBA
05.03.2009 13:50:22
Tino
Hallo,
hier mal ein Beispiel als .zip mit der Ordnerstruktur.
(Enthält keine VBA Makros)
Es sind zwei Dateien in Unterschiedlichen Ordnern und
die eine verweist mittels Hyperlink (in einer Zelle) immer auf die andere.
https://www.herber.de/bbs/user/60009.zip
Gruß Tino
Anzeige
Ach so....
05.03.2009 14:13:30
Ramses
Hallo
ganz ehrlich:
Auf die Idee bin ich noch gar nicht gekommen den Link so von Hand einzugeben :-)
Gruss Rainer
AW: Ach so....
05.03.2009 14:16:50
Tino
Hallo,
ja daher habe ich den Exceldialog oben empfohlen, der ist aber nicht recht.
Jetzt habe ich noch eine Api gefunden siehe oben.
Gruß Tino
AW: Relativer Hyperlink mit VBA
05.03.2009 13:56:39
Jogy
Hi.
Also wenn ich das von den Problemen, die ich damit mal hatte, noch richtig im Kopf habe, dann sind die Pfade immer relativ zum Dokument gesetzt, wenn keine Hyperlink-Basis (Datei - Eigenschaften - Zusammenfassung) eingestellt ist. Ist dort eine gesetzt, dann ist der Pfad relativ zu dieser (und wenn dort ein nicht vorhandenes Laufwerk steht immer absolut).
Gruss, Jogy
Anzeige
AW: Relativer Hyperlink mit VBA
05.03.2009 14:14:06
Tino
Hallo,
kann ich nicht sagen, ich arbeite zu wenig mit Hyperlinks um zu sagen wann es funzt und wann nicht.
Was ich jetzt so bei mir mal auf die schnelle getestet habe geht’s,
Hyperlinks auf Webseiten verfahren ja auch so.
Gruß Tino

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige