Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Hyperlink per Vba

Forumthread: Hyperlink per Vba

Hyperlink per Vba
19.04.2008 21:14:44
Christian

Hallo Forum,
folgenden Code von fcs habe ich im Archiv gefunden:


Sub HyperlinksSetzen()
Dim wks As Worksheet, Zelle As Range, Zeile As Long
Set wks = Worksheets("Tabelle1") 'Tabelle in der Hyperlinks eingefügt werden sollen, ggf.  _
anpassen
For Zeile = 2 To wks.Cells(wks.Rows.Count, 1).End(xlUp).Row Step 24
Set Zelle = wks.Cells(Zeile, 1)
wks.Hyperlinks.Add Anchor:=Zelle, Address:="", SubAddress:="'" & Zelle.Value & "'!A1"
Next
End Sub


Der Archivthread dazu:
https://www.herber.de/forum/archiv/864to868/t864333.htm
Nun kann ich den leider nicht auf meine gewünschten Bedürfnisse anpassen (siehe Level).
Wie muss der Code umgeschrieben werden, damit in Spalte I Hyperlinks per VBA erzeugt werden, deren Adresse in Spalte N und der geünschte Name in Spalte O stehen bzw. Hyperlinks in Spalte K erzeugt werden, mit der Adresse aus Spalte Q und dem Namen aus Spalte R.
Momentan werden die Hyperlinks per Formel erzeugt, aber diese werden von Excel nicht als Hypelinks erkannt, aber das ist für ein weiters Makro, welches mir von Luschi gepostet wurde, von Bedeutung.
Ein Ausschnitt aus dem Tabellenblatt zur Verdeutlichung meines Anliegens:
Es sind insgesamt 20 Hyperlinks, die per Vba erzeugt werden sollen.
Einfügen-Hyperlinks funktioniert hier auch nicht, da es sich um ständig wechselnde Bezüge handelt.
Für Anregungen und Unterstützung bedanke ich mich im Voraus (und auch danach)!
MfG Christian
TOP 10 EP

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
ein Versuch
19.04.2008 22:26:17
Matthias L
Hallo Christian
unabhängig von Deinem neuen Beitrag habe ich mich mit Deinem Problem auseinandergesetzt.
Ich bin der Meinung Du hättest in Deinem alten Beitrag bleiben sollen. Aber das nur nebenbei.
Wenigstens hast Du ihn geschlossen.
Evtl. hift Dir das ja weiter.
https://www.herber.de/bbs/user/51711.xls
Userbild

Anzeige
AW: ein Versuch
19.04.2008 23:33:45
Christian
Hallo Matthias,
vielen Dank für Deine Unterstützung, nur hilft mir das nicht viel weiter.
Deshalb muss ich wohl weiter ausholen.
Mit meinen geringen Kenntnissen in vba gehe ich mal davon aus, das es einen Unterschied gibt, wenn ein Hyperlink per Formel oder mittels Menü Einfügen Hyperlink erstellt wird.
Und genau darin liegt mein Problem.
In dem Code, der von Luschi gepostet wurde, werden meiner Meinung nach nur "echte" Hyperlinks erkannt, und auch absolut korrekt ausgelesen und die Bildschirmansicht danach angepasst. Der Code von fcs erstellt auch "echte" Hyperlinks, auch diese werden mit Luschis Code richtig ausgelesen und danach die Bildschirmansicht angepasst.
Nur stehen meine Adressen nun nicht in Spalte A von Zeile 1 bis x, sondern in Spalte N bzw. Q.
Die Anpassung mit dem Zähler der Zeilenanzahl und der Startzeile habe ich auch schon hinbekommen, nur nicht das die richtige Adresse und Name hinterlegt wird (aus Spalte N oder Q und O oder R).
Ich benötige also einen echten variablen Hyperlink oder eine andere Lösung, die die Bilschirmansicht je nach aktiver Spalte anpasst.
Also wenn Spalte AD nach Hyperlink aktiv ist, dann Ansicht ab Spalte AA bzw. wenn Spalte P Oder U aktiv ist, dann Ansicht ab Spalte L.
Mit folgendem Code vom Sepp (Josef Ehrensberger) habe ich mal meine Hyperlinks ausgelesen, und die mit Formel erzeugten Hyperlinks werden dabei nicht erkannt:


Sub readLink()
Dim hLink As Hyperlink
Dim lngR As Long
lngR = 2
With Sheets("Tabelle1")
.Range("A2:B" & Rows.Count).Clear
For Each hLink In ActiveSheet.Hyperlinks
.Cells(lngR, 1) = hLink.Parent.Address(0, 0)
'als Text eintragen
' If hLink.Address = "" Then
' .Cells(lngR, 2) = hLink.SubAddress
' Else
' .Cells(lngR, 2) = hLink.Address
' End If
'oder als Hyperlink eintragen
.Hyperlinks.Add Anchor:=.Cells(lngR, 2), _
Address:=hLink.Address, _
SubAddress:=IIf(hLink.SubAddress <> "", hLink.SubAddress, ""), _
TextToDisplay:=IIf(hLink.Address = "", hLink.SubAddress, hLink.Address)
lngR = lngR + 1
Next
.Columns.AutoFit
End With
End Sub


Demnach muss ich meine Formel-Hyperlinks in "echte" Hyperlinks umwandeln, damit das was ich vorhabe auch klappt.
Und genau das ist es, was ich ohn Forumsunterstützung nie schaffen werde!!
MfG Christian

Anzeige
AW: ein Versuch
20.04.2008 00:19:54
Erich G.
Hi Christian,
probier mal


Sub HyperlinksSetzen2()
Dim lngZ As Long
For lngZ = 17 To Cells(Rows.Count, 14).End(xlUp).Row Step 3
ActiveSheet.Hyperlinks.Add Anchor:=Cells(lngZ, 9), Address:="", _
SubAddress:=CStr(Cells(lngZ, 14)), TextToDisplay:=CStr(Cells(lngZ, 15))
ActiveSheet.Hyperlinks.Add Anchor:=Cells(lngZ, 11), Address:="", _
SubAddress:=CStr(Cells(lngZ, 17)), TextToDisplay:=CStr(Cells(lngZ, 18))
Next lngZ
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
ganz großes Ding!!!
20.04.2008 01:57:16
Christian
Hallo Erich,
wirklich super!!
Rückmeldung ist doch Ehrensache, da ich ja auch öfter mal hier auf Formelfragen antworte, und ich leider feststellen muß, das ein Feedback meistens ausbleibt.
Nur noch eine Bitte:
Da ich doch etwas dazulerne möchte, würde ich gerne den Code verstehen können.
Könntest Du mir den Code bitte nochmal mit Kommentaren versehen, welche Logik dahintersteht?
Das würde mir unheimlich weiterhelfen, die unbekannte Welt der Vba verstehen zu lernen!
Nochmals vielen Dank und grüße nach Kamp-Lintfort
MfG Christian

Anzeige
AW: ganz großes Ding!!!
20.04.2008 12:00:02
Erich G.
Hi Christian,
wo soll ich anfangen mit den Kommentaren und wo aufhören?
Besser wäre, du würdest eine oder mehrere Fragen zum Code stellen.
Was ist unklar?
Das Dim?
Die For-Schleife über die Zeilen in Dreierschritten?
Der Aufruf der Add-Methode für Hyperlinks?
SubAddress:=CStr(Cells(lngZ, 14))
bedeutet z. B., dass der Wert, der in Zeile lngZ, Spalte N (14. Spalte) steht,
in einen String umgewandelt und dann als Subadresse verwendet wird.
Hilfreich wäre sicher an der einen oder anderen Stelle ein Blick in die VBA-Hilfe
(Cursor in einen unklaren begriff und dann Taste F1).
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
Danke an die Helfer
20.04.2008 12:36:31
Christian
Hallo Erich,
danke für die kleine Aufklärung, der Hinweis zur SubAdress war der Tip, den ich brauchte, um den Code an andere Tabellenblätter anzupassen.
Daran siehst Du, das mein Level bei Vba noch ganz ganz unten ist;-)
Nochmals vielen Dank für Deine Hilfe und auch Dank an die anderen Helfer, die sich mit meinen Fragen befasst und geantwortet haben.
MfG Christian

Anzeige
;
Anzeige

Infobox / Tutorial

Hyperlink per VBA erstellen und anpassen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu:

    • Klicke im Menü auf Einfügen und wähle Modul.
  3. Kopiere den folgenden Code in das Modul:

    Sub HyperlinksSetzen()
        Dim wks As Worksheet, Zelle As Range, Zeile As Long
        Set wks = Worksheets("Tabelle1") ' Tabelle anpassen
        For Zeile = 2 To wks.Cells(wks.Rows.Count, 1).End(xlUp).Row Step 24
            Set Zelle = wks.Cells(Zeile, 1)
            wks.Hyperlinks.Add Anchor:=Zelle, Address:="", SubAddress:="'" & Zelle.Value & "'!A1"
        Next
    End Sub
  4. Passe den Code an Deine Bedürfnisse an:

    • Ändere die Anchor, Address und SubAddress, um Hyperlinks aus anderen Spalten zu erstellen. Zum Beispiel:
    ActiveSheet.Hyperlinks.Add Anchor:=Cells(lngZ, 9), Address:="", _
    SubAddress:=CStr(Cells(lngZ, 14)), TextToDisplay:=CStr(Cells(lngZ, 15))
  5. Schließe den VBA-Editor und führe das Makro aus, indem Du ALT + F8 drückst und das Makro auswählst.


Häufige Fehler und Lösungen

  • Fehler: "Objekt erforderlich"

    • Stelle sicher, dass Du die richtige Tabelle und die richtigen Zellen referenzierst. Überprüfe, ob Worksheets("Tabelle1") korrekt ist.
  • Hyperlinks werden nicht erkannt

    • Vergewissere dich, dass die Hyperlinks mit Hyperlinks.Add erstellt wurden und nicht über Formeln.
  • Falsche Adressen

    • Überprüfe die Indizes, die Du für Cells(Zeile, Spalte) verwendest. Diese müssen den korrekten Spalten für die Adressen und Anzeigetexte entsprechen.

Alternative Methoden

  • Hyperlinks über Excel-Funktion:

    • Du kannst auch die Excel-Funktion HYPERLINK verwenden, um Links zu erstellen, aber dies wird nicht als "echter" Hyperlink behandelt, was in manchen Makros ein Problem darstellen kann.
  • Direktes Einfügen:

    • Manuell über Einfügen > Hyperlink kann auch eine Option sein, wenn Du nicht die VBA-Methode verwenden möchtest.

Praktische Beispiele

  1. Hyperlinks in Spalte I erzeugen:

    Sub HyperlinksSetzenSpalteI()
        Dim lngZ As Long
        For lngZ = 2 To Cells(Rows.Count, 9).End(xlUp).Row
            ActiveSheet.Hyperlinks.Add Anchor:=Cells(lngZ, 9), Address:="", _
            SubAddress:=CStr(Cells(lngZ, 14)), TextToDisplay:=CStr(Cells(lngZ, 15))
        Next lngZ
    End Sub
  2. Hyperlinks in Spalte K erzeugen:

    Sub HyperlinksSetzenSpalteK()
        Dim lngZ As Long
        For lngZ = 2 To Cells(Rows.Count, 11).End(xlUp).Row
            ActiveSheet.Hyperlinks.Add Anchor:=Cells(lngZ, 11), Address:="", _
            SubAddress:=CStr(Cells(lngZ, 17)), TextToDisplay:=CStr(Cells(lngZ, 18))
        Next lngZ
    End Sub

Tipps für Profis

  • Verwende Debug.Print:

    • Nutze Debug.Print im Code, um Werte zu prüfen und Fehler zu identifizieren.
  • Kommentare im Code:

    • Kommentiere Deinen Code, um spätere Anpassungen zu erleichtern und anderen zu helfen, den Code zu verstehen.
  • Nutze Option Explicit:

    • Füge am Anfang Deines Moduls Option Explicit hinzu, um sicherzustellen, dass alle Variablen deklariert werden.

FAQ: Häufige Fragen

1. Wie kann ich die Adresse eines Hyperlinks nachträglich ändern? Du kannst die Methode Hyperlinks(i).Address verwenden, um die Adresse zu ändern. Beispiel:

ActiveSheet.Hyperlinks(1).Address = "neueAdresse.com"

2. Was ist der Unterschied zwischen Address und SubAddress? Address ist die URL, auf die der Hyperlink zeigt, während SubAddress in der Regel auf eine Zelle innerhalb derselben Arbeitsmappe verweist.

3. Wie kann ich einen Hyperlink zu einer externen Datei erstellen? Setze die Address auf den Pfad der Datei, z.B.:

ActiveSheet.Hyperlinks.Add Anchor:=Zelle, Address:="C:\MeinOrdner\Datei.xlsx"

4. Wie kann ich einen Hyperlink zu einer Zelle in einem anderen Arbeitsblatt erstellen? Verwende die SubAddress-Eigenschaft und setze die Adresse auf den Namen des Arbeitsblatts und die Zelle, z.B.:

ActiveSheet.Hyperlinks.Add Anchor:=Zelle, SubAddress:="'AnderesBlatt'!A1"

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige