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

Hyperlink per VBA ansteuern

Hyperlink per VBA ansteuern
12.12.2014 11:23:15
Nico
Moin zusammen,
ich hab Zelle A1 einen Hyperlink, der folgende Formel enthält:
=IF(DATE(RIGHT(C1;4);MID(C1;4;2);LEFT(C1;2))=TODAY();"";HYPERLINK("#A"&2+MATCH(DATE(RIGHT(C1;4); MID(C1;4;2);LEFT(C1;2));A3:A1000;0);C1))
Zur Erklärung... in Spalte A ist jeder Tag des Jahres 2014 als Datum. Der Hyperlink springt zu der Zeile in dem das Datum steht, das vorher in C1 (mit einem DateTimePicker) eingegeben wurde.
Nun möchte ich, dass per Shortcut das selbe passiert, wie wenn ich manuell auf den Hyperlink draufklicken würde.
Dafür habe ich bereits folgendes in "This Workbook" eingegeben:
Private Sub Workbook_Open()
Application.OnKey "^{q}", "HyperHyper"
End Sub

Im Modul habe ich bereits folgendes probiert:
Sub HyperHyper()
On Error Resume Next
ActiveWorkbook.FollowHyperlink ActiveCell.text
End Sub
Das Ganze funktioniert auch, aber nur wenn ich den friendlyname aus der Formel entferne. D.h wenn dann in A1 das Ergebnis der Formel als Hyperlink steht.
Kann mir evtl. jemand sagen, wie ich das Ganze zum laufen bringe sodass weiterhin der friendlyname da steht. (Activecell.formula habe ich auch schon probiert)
Nebenbei: ich habe nicht viel Ahnung von VBA und habe mir alles was ich bisher habe aus verschiedenen Foren zusammengesucht...
Danke für die Hilfe!!

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
kannst Du ei Beispiel hochladen...
12.12.2014 18:28:39
Tino
Hallo,
dann könnte ich versuchen aus der Formel den Link heraus zu ziehen.
Gruß Tino

Ich experimentiere zZ mit echten u.'unechten' ...
13.12.2014 12:58:07
Luc:-?
…(Fml-)Hyperlinks, Nico,
und wundere mich, dass das bei dir überhpt fktioniert - bei mir nämlich nicht!
Gruß, Luc :-?

AW: Ich experimentiere zZ mit echten u.'unechten' ...
13.12.2014 15:58:38
Tino
Hallo,
bis auf das FollowHyperlink ...,
(dazu gibt es geteilte Meinungen, bei den einen geht es bei anderen nicht)
sollte eigentlich alles gehen.
Aber dies kann man leicht durch Goto ersetzen!
Gruß Tino

Eben, deshalb hattest du ja auch zuvor ...
13.12.2014 20:19:40
Luc:-?
…geschrieben, was du geschrieben hast, Tino;
vermute, das die Methode .FollowHyperlink für echte Hyperlinks (i.e.S. → objekt­bildende ZellEigenschaft) gedacht ist. .GoTo und Vglbares fktioniert natürlich nur mit der ZielAdresse, die du ja richtigerweise erst aus der Fml isolieren wolltest, was normalerweise nicht trivial ist. Ich habe deshalb, angeregt durch einen Thread im provOL-Forum mit Link auf diesen erbarmenswürdig eingeschränkten Trivial-Versuch* der HL-AdressDarstellung (nur für Dateien/WebAdressen), eine UDF geschrieben, die das auch für Fml-HLs mit diversen Arten dynamischer HL-Bildung, also recht komplexe Fmln, erledigt. Will das noch mit der etwas andersartigen Fml des Fragestellers testen und melde mich dann wahrscheinlich hier noch mal.
Auf jeden Fall sollte der FriendlyName kaum stören. Das Problem liegt linkziel-abhängig wohl woanders.
* Was manche Leute sich so trauen, auf ihre WebSite zu setzen…!? :-/
Eine etwas komfortablere UDF sollte zumindest so aussehen:
Function LinkAdresse(Zelle As Range)
On Error Resume Next
With Zelle.HyperLinks
If CBool(.Count) Then
If .Item(1).Address = "" Then
If InStr(.Item(1).SubAddress, "!") = 0 Then
LinkAdresse = "'" & ActiveSheet.Name & "'!" & .Item(1).SubAddress
Else: LinkAdresse = .Item(1).SubAddress
End If
Else: LinkAdresse = .Item(1).Address
End If
Else: LinkAdresse = CVErr(xlErrNA)    'Anm: Nicht für Fml-HLs!
End If
End With
End Function
Gruß, Luc :-?

Anzeige
wie aussieht hat Nico eine Lösung
14.12.2014 08:53:23
Tino
Hallo,
scheinbar hat es sich ja sowieso erledigt
weil Nico sich nicht mehr meldet.
Also brauchen wir uns keine Gedanken mehr drüber machen!
Gruß Tino

Ja, da hast du sicher recht, und ich kann mir ...
14.12.2014 12:19:48
Luc:-?
…auch vorstellen, wie die aussieht, Tino,
und du sicher auch, denn er braucht ja, wenn er (auch) mit ShortcutKeys arbeiten will und ohnehin das gesuchte Datum in C1 eintragen muss, gar keinen HL, sondern kann das gleich komplett mit einer EreignisProzedur machen. Wenn er das SprungPgm separat hält und in der EreignisProz nur aufruft, kann er das auch per Tastatur tun. Er hat hier ursprgl wohl um meherere Ecken gedacht…
Mich hat das nur wg des HLs als Test für eine UDF interessiert, die anstelle des #NV der geposteten tatsächlich die ZielAdresse liefert, also auch für Fml-HLs tauglich ist. Dafür ist seine Fml aber zu komplex (in diesem Fall eigentl nur eine SchlussKlammer zu viel, aber in anderen kann's ja anders sein) und man käme nicht um KlammernZählen herum, was ich eigentlich vermeiden wollte. Ich berücksichtige deshalb solche Fälle wohl (vorerst?) nur noch mit einem aussage­kräftigeren F-Wert als bisher.
Gruß, Luc :-?

Anzeige
AW: Ja, da hast du sicher recht, und ich kann mir ...
14.12.2014 12:41:36
Tino
Hallo,
wenn es aus der Hyperlink-Formel sein muss,
würde ich die Formel nach Hyperlink aufsplitten und solang wieder zusammenführen
bis mit Evaluate ein gültiges Ergebnis raus kommt.
Danach noch # entfernen oder durch die Tabelle ersetzen.
Gruß Tino

Ja, so hatte ich das auch gemacht, ...
14.12.2014 13:46:29
Luc:-?
…Tino,
und für einfache HL-Fmln klappt's auch gut, sogar für dynamische HLs (mit AdressBildung per TeilFml), aber so etwas wie hier geht mir dann doch zu weit, weil es nur aufwendig universell, also für alle EventualFälle, machbar ist. Ab/für Teilstück ab HYPERLINK( müssten dann die Klammern gezählt wdn, um auch exakt nur das Innere dieser TeilFml zu erwischen. Alles Weitere ist dann kein Problem.
Naja, viell mache ich das irgendwann doch noch…
Nebenbei, in solchen WENN-Fmln könnte man ja auch 2 verschiedene HLs unterbringen; dann würde es noch verrückter wdn…
Außerdem sind mit Fml-HLs auch mehrere (auch nicht-zusammenhängende) Zellen bzw Bereiche (mit nur einem HL!) auswählbar. Des weiteren kann die AdressAngabe hier auch in Z1S1-Form erfolgen. Da das mit echten HLs nicht geht, ist anzunehmen, dass MS bei Fml-HLs ohnehin mit anderen Methoden arbeitet.
Luc :-?

Anzeige
Hab's nun doch noch eingebaut ...
15.12.2014 00:03:12
Luc:-?
…und es fktioniert auch in diesem speziellen, aber nicht in allen Fällen:
Rem Folgt vorhandenem bzw erzeugt neuen HLink lt angegeb Parametern
'   Hinws: Benötigt udF LinkAdresse! Param b.Tasten-KurzRuf unmögl!
'   Vs1.1 -LSr -cd:20141212 -1pub:20141214herber -lUpd:20141214t
Sub FolgeHL(ParamArray ZielAdresse())
Dim LiTrZ$, hlAdr
On Error Resume Next
LiTrZ = Application.International(xlListSeparator)
If Not IsMissing(ZielAdresse) Then
hlAdr = Array(CStr(ZielAdresse(0)), CStr(ZielAdresse(1)))
Else: hlAdr = LinkAdresse(ActiveCell)
End If
If IsError(hlAdr) Then Exit Sub
If IsArray(hlAdr) Then
ActiveWorkbook.FollowHyperlink hlAdr(0), hlAdr(1)
ElseIf IsError(Range(Replace(hlAdr, LiTrZ, ","))) Then
If ActiveCell.HyperLinks(1).Address = "" Then
ActiveWorkbook.FollowHyperlink "#" & hlAdr
Else: ActiveWorkbook.FollowHyperlink hlAdr
End If
Else: Application.Goto Range(Replace(hlAdr, LiTrZ, ","))
End If
End Sub

Rem Liefert ZielAdressen echter u.v.Fml-Hyperlinks in 1er xlBlatt-Zelle
'   Erweiterung d.TrivialVariante* f.echte ExtHLinks auf div IntHLinks;
'   nur f.A1-BezugsNotation! (*lt Quelle: w³.j-hennekes.de/1478886.htm)
'   Vs1.1 -LSr -cd:20141212 -1pub:(1.0)20141213herber -lUpd:20141214t
Function LinkAdresse(Zelle As Range)
Dim klDif(1) As Long, kp As Long, hlAdr
On Error Resume Next
With Zelle.HyperLinks
If CBool(.Count) Then
If .Item(1).Address = "" Then
LinkAdresse = .Item(1).SubAddress
ElseIf .Item(1).SubAddress  "" Then
With .Item(1)
LinkAdresse = Array(.Address, .SubAddress)
End With
Else: LinkAdresse = .Item(1).Address
End If
ElseIf Zelle.HasFormula Then
hlAdr = Zelle.Formula
If CBool(InStr(hlAdr, "HYPERLINK(")) Then
hlAdr = Split(hlAdr, "HYPERLINK(")
klDif(0) = Len(Replace(hlAdr(0), ")", ""))
klDif(1) = Len(Replace(hlAdr(0), "(", "")) - 1
For kp = 1 To klDif(0) - klDif(1)
hlAdr(1) = Left(hlAdr(1), InStrRev(hlAdr(1), ")") - 1)
Next kp
If Right(hlAdr(1), 1)  ")" Then _
kp = InStrRev(hlAdr(1), ",") Else kp = 0
If kp > InStrRev(hlAdr(1), ")") Then hlAdr(1) = Left(hlAdr(1), kp - 1)
If CBool(InStr(hlAdr(1), "(") + InStr(hlAdr(1), """#""&")) Then
LinkAdresse = Evaluate(hlAdr(1))
If LinkAdresse = hlAdr(1) Then LinkAdresse = CVErr(xlErrRef)
Else: LinkAdresse = Replace(hlAdr(1), """", "")
End If
If IsError(LinkAdresse) Then
ElseIf Left(LinkAdresse, 1) = "#" Then
LinkAdresse = Mid(LinkAdresse, 2)
End If
Else: LinkAdresse = CVErr(xlErrRef)
End If
Else: LinkAdresse = CVErr(xlErrNA)
End If
End With
End Function
Luc :-?

Anzeige
hier noch mein Gedankenspiel ...
15.12.2014 09:31:32
Tino
Hallo,
als Code für die HYPERLINK-Formel.
Wenn es überhaupt den Fragesteller noch interesiert
Sonst ist dies sowieso für die Tonne, ich schätzte zu 98% gibst alterative bessere Lösungen.
Sub Test()
Dim sFormel$

With Tabelle1.Range("A1")
    If .HasFormula Then
        sFormel = .Formula
        If InStr(sFormel, "HYPERLINK(") > 0 Then
            sFormel = Extrahiere_HyLink(sFormel)
            If sFormel <> "" Then
                sFormel = Replace(sFormel, "#", .Parent.Name & "!")
                Application.Goto Range(sFormel)
            End If
        End If
    End If
End With

End Sub

Function Extrahiere_HyLink(ByVal strFormel$) As String
Dim varTmp, sErg$
On Error Resume Next
varTmp = "HYPERLINK(" & Split(strFormel, "HYPERLINK(")(1)
strFormel = ""
For Each varTmp In Split(varTmp, ")")
    strFormel = strFormel & varTmp & ")"
    sErg = Evaluate(strFormel & ")")
    If sErg <> "" Then Exit For
Next varTmp
Extrahiere_HyLink = sErg
End Function
Gruß Tino

Anzeige
Ist als Gedankenspiel OK, denn es fktt in ...
15.12.2014 10:58:23
Luc:-?
…derart gelagerten Fällen von Fml-HLs prinzipiell analog und liefert uU, wie auch meine Lösung, Z1S1-Bezüge, Tino,
die in HL-Fmln ebenfalls möglich sind. Adressen echter HLs natürlich nicht, aber das hattest du ja auch nicht beabsichtigt. Bei Mehr­fach­Bezügen liefert sie die 1.Adresse, meine gepostete Lösung idR einen F-Wert (alles gibt nur meine wesentl umfangreichere Hpt-UDF wieder, die ich aber noch auf KlammerZählen erweitern muss).
Die Rückmeldung des FrageStellers kann uns hier jetzt mal ausnahmsweise schnurz sein… ;-]
Gruß, Luc :-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige