yotyot
Goto Top

Excel VBA Link hinzufügen funktioniert nur, wenn ich im Code einen Haltepunkt setze

Moin!

Ich habe in Excel 2010 eine Tabelle mit rund 1200 Zeilen (dynamisch), wo in einer Spalte automatisch Hyperlinks hinterlegt werden sollen.

Beim Entwickeln funktioniert das auch ganz gut unter folgenden Bedingungen:

Ich gehe den Code mit F8 / Einzelschritt durch (dauert mir nun wirklich zu lange) oder

ich setze einen Haltepunkt in der Zeile, wo der Link gesetzt wird, gehe einmal mit F8 weiter, lösche dann den Haltepunkt und lasse den Rest des Codes durchlaufen. (Unbrauchbar, weil die Tabelle von unkundigen und ungeduldigen Kollegen benutzt werden soll. Und ich habe keine Lust, das alle paar Tage zu machen, weil sich die Inhalte geändert haben.)

Auf diese Weise funktioniert alles bestens.

Wenn ich aber das Makro komplett automatisch ablaufen lasse, egal ob beim Start der Datei oder ob ich im Code auf Ausführen / F5 klicke oder ob ich die Makro-Schaltfläche verwende, in jedem Fall sind zwar dann alle in Frage kommenden Zellen formatiert, als wäre ein Hyperlink da (blau, unterstrichen, Schrift etwas anders, es steht der vorgesehene Text drin und ein paar Zeilen bekommen keinen Link, weil es dazu keine Zuordnung gibt), aber es sind keine Links hinterlegt.

Ich habe die Zeile für den Hyperlink auch schon in ein eigenes Sub ausgelagert mit dem selben Effekt.

Der Code dazu sieht so aus:

Worksheets("Tabelle1").Hyperlinks.Add anchor:=Range(firstAddress), Address:="https://host.domain.tld/Verzeichnis/main.aspx?etn=incident&pagetype=entityrecord&id=%7B" & strIncidentId & "%7D"

Wenn die Links überhaupt gesetzt werden, funktionieren sie korrekt.

Gerade, als ich schon aufhören wollte, ist mir noch was aufgefallen: es sieht genauso aus, als würde der Link einmal erstellt und anschließend die Daten aktualisiert, die aus einer Datenbank kommen, womit die Zellen wieder neu geschrieben werden und dann keinen Link mehr an Bord haben.

Hat da jemand eine Idee dazu?

Grüße

Y.

Content-Key: 257419

Url: https://administrator.de/contentid/257419

Printed on: April 23, 2024 at 21:04 o'clock

Member: colinardo
Solution colinardo Dec 12, 2014, updated at Dec 15, 2014 at 10:17:23 (UTC)
Goto Top
Hallo Jörg,
ich hoffe mal nicht das sich in der Variablen firstAddress ein Range mit mehreren Zellen befindet.
Mach es besser mit einer ForEach-Schleife dann klappt das einwandfrei face-wink

simples Beispiel
strIncidentId = "123456"  
With ActiveSheet
    For Each cell In .Range("A1:A10")  
        .Hyperlinks.Add anchor:=cell, Address:="https://host.domain.tld/Verzeichnis/main.aspx?etn=incident&pagetype= ..." & strIncidentId & "%7D"  
    Next
End With
Zusätzlich wäre es anzuraten in den Optionen von Excel unter Erweitert die Option Verknüpfungen mit anderen Dokumenten aktualisieren für diese Mappe zu deaktivieren.

Grüße Uwe
Member: YotYot
YotYot Dec 12, 2014 at 11:06:33 (UTC)
Goto Top
Du schon wieder face-wink

Moin! Und Aloha!

Das ist die Fortführung von dem Script, bei dem Du mir gestern/vorgestern schon geholfen hast, "firstAddress" beinhaltet genau eine Zelle.

Deinen Vorschlag mit dem With habe ich jetzt mal getestet, wobei ".Range("A1:A10")" in meinem Fall explizit wieder firstAddress ist, da jede Zelle einen individuellen Link bekommt. Hintergrund: In firstAddress steht eine Ticketnummer, für die ich eine strIncidentId = Datensatz-ID auslese, die ich für den Link brauche, um das Ticket direkt aufrufen zu können. Ein bisschen Komfort für die Kollegen face-wink
Auch den Haken für die automatische Aktualisierung habe ich herausgenommen.

Ergebnis: Leider das gleiche wie vorher: Hält das Script per Haltepunkt (Stop) einmal an, kann es anschließend komplett durchlaufen und alles ist gut. Auf welche Weise ich es starte, ist dabei egal. Läuft es ohne Stop durch, auch hier egal, wie ich es starte, ist zwar die Formatierung für die Links da, die Links selbst fehlen aber.

Kann man irgendwie so einen Stop programmatisch mit einbauen, der sich nach einer Sekunde oder so selbst auflöst, das Script durchlaufen lässt und sich für die nächste Aktualisierung selbst wieder setzt? Würde mir ja auch reichen.

Jetzt ist erstmal essen angesagt face-smile

Grüße aus dem Regen

Y.
Member: colinardo
colinardo Dec 12, 2014 updated at 15:12:34 (UTC)
Goto Top
Yip, it's me ;--)
Deinen Vorschlag mit dem With habe ich jetzt mal getestet, wobei ".Range("A1:A10")" in meinem Fall explizit wieder firstAddress
Ahhhha jetzt kommen wir der Sache schon näher, wenn du meinen Code von deinem letzten Post benutzt, nehme nicht firstAddress sondern die Variable f die den Range der gefundenen Zelle beinhaltet, bzw. einen Offset dieser Zelle !!! Also dann etwa so
wsLinks.Hyperlinks.Add anchor:=f.Offset(0,8), Address:="https://host.domain.tld/Verzeichnis/main.aspx?etn=incident&pagetype= ..." & strIncidentId & "%7D" 
firstAddress ist nur dafür da um zu überprüfen ob der Suchvorgang bereits alle Fundstellen durchsucht hat. Also als Referenz für deinen Fall absolut ungeeignet.

Grüße Uwe
Member: YotYot
YotYot Dec 15, 2014 at 10:17:12 (UTC)
Goto Top
Soooo, dann wollen wir mal:

Zunächst: es läuft! Allerdings anders, als gedacht.

Ob ich dem anchor nun firstAddress oder f.Offset mitgebe, ist dem relativ schnuppe, da passiert das gleiche. Ich habe bisher immer eine bereits vorhandene Spalte zusätzlich mit Links befüllt und das wurde dann immer wieder am Ende des Scripts überschrieben (habe ich mit einer kurzen Wartezeit pro Durchlauf dann festgestellt). Ganz zum Schluss wurden anscheinend nochmal die verbundenen Daten aktuvalisiert. Jetzt lasse ich die Links in eine andere Spalte schreiben, die auch nicht direkt an den automatisch ausgelesenen Bereich angrenzen darf. Damit die Ticketnummern nicht doppelt auftauchen, blende ich die Original-Spalte am Ende des Scripts aus.

Zum Vorstellen also nochmal:

Die Spalten A bis N werden per externer Datenverknüpfung befüllt, die Spalte H ist die mit den Ticketnummern, für die ich die Links erzeugen will. Nun lasse ich die Spalte O frei und füge die Links in P ein, lege den Text aus H als TextToDisplay darüber und alle sind glücklich face-smile
Würde ich die Links in O einfügen lassen, werden sie anschließend übrigens ebenfalls gelöscht.

Danke für's Mitleiden face-wink

Jörg