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

Links auf Tabellenblatt aktualisieren

Links auf Tabellenblatt aktualisieren
jorka
Hallo zusammen,
ich möchte gerne auf einem Tabellenblatt "Kunden" Hyperlinks einfügen. Dazu wird in Spalte A nach dem Wort "Kunde" gesucht, die Adresse der Zelle genommen und in der gleichen Zeile in Spalte G als Link eingefügt. Da auf diesem Tabellenblatt die Liste der Kunden ständig wächst, werden jedesmal bei Aktivierung des Tabellenblattes die Links aktualisiert. Auf einem anderen Blatt "Übersicht" wird dann über einen Button in dem Kundenblatt nach den Kundennamen gesucht und diese dann in einer Liste fein säuberlich untereinander aufgelistet. Dabei soll auch der Link kopiert werden, damit man aus der Übersicht direkt zu dem jeweiligen Kunden springen kann.
Mein Problem dabei ist, daß nur beim ersten Auffinden von "Kunde" ein Link erzeugt wird, und dann ist scheinbar Feierabend. Woran kann das liegen?
Die Linkaktualisierung sieht so aus:
Private Sub Worksheet_Activate()
Columns("G").ClearContents
Dim wks1 As Worksheet
Dim wert As String
Dim rFind As Range
Dim lrow As Long
Dim sFirst As String
Dim row1 As String
Set wks1 = Sheets("Kunden")
lrow = wks1.Range("A65536").End(xlUp).Row + 1
wert = ("Kunde")
Set rFind = wks1.Range("A21:A65536").Find(what:=wert, LookIn:=xlValues, lookat:=xlWhole)
If Not rFind Is Nothing Then
sFirst = rFind.Address
row1 = rFind.Row
Do
Range("G" + row1).Select
rFind.Hyperlinks.Add Anchor:=Selection, Address:="Kundenprojekte.xls", SubAddress:=(" _
Kunden!" + sFirst), TextToDisplay:=("link")
Set rFind = wks1.Range("A22:A65536").FindNext(rFind)
lrow = lrow + 1
Loop While sFirst  rFind.Address
End If
sFirst = vbNullString
Set rFind = Nothing
Range("B5").Activate
End Sub

Habt ihr da eine Idee?
Viele Grüße,
Jörg
AW: Links auf Tabellenblatt aktualisieren
21.08.2009 13:32:47
Daniel
Hi
der Link wird immer in die Zeile geschrieben, die dem Wert der Variable "row1" entspricht:
allerdings wird "row1" innerhalb der Do-Schleife nicht verändert, dh der Link kommt immer in die gleiche Zeile.
Gruß, Daniel
AW: Links auf Tabellenblatt aktualisieren
21.08.2009 13:39:03
jorka
Hi Daniel,
und wie würde die Veränderung von row1 innerhlab der Schleife aussehen müssen?
Viele Grüße,
Jörg
AW: Links auf Tabellenblatt aktualisieren
21.08.2009 13:41:39
Daniel
wie wird den die Variable row1 für den ersten Link, wo es ja funktioniert, belegt?
Gruß, Daniel
AW: Links auf Tabellenblatt aktualisieren
21.08.2009 13:45:32
jorka
Na ich suche mit
Set rFind = wks1.Range("A21:A65536").Find(what:=wert, LookIn:=xlValues, lookat:=xlWhole)
nach einer Zelle, und sage dann, daß row1 die Zeile der gefundenen Zelle sein soll (row1 = rFind.Row).
Viele Grüße,
Jörg
Anzeige
AW: Links auf Tabellenblatt aktualisieren
21.08.2009 13:51:19
Daniel
Hi
ja und das gleiche muss ja auch innerhalb der Do-Schleife passieren, wenn nach FindNext rFind die nächste Zelle ist.
Gruß, Daniel
AW: Links auf Tabellenblatt aktualisieren
21.08.2009 14:34:31
jorka
Hi Daniel,
ok, das scheint zu klappen. Die If-Schleife sieht nun so aus:
Set rFind = wks1.Range("A21:A65536").Find(what:=wert, LookIn:=xlValues, lookat:=xlWhole)
If Not rFind Is Nothing Then
sFirst = rFind.Address
row1 = rFind.Row
Do
Range("G" + row1).Select
rFind.Hyperlinks.Add Anchor:=Selection, Address:="Kundenprojekte.xls", SubAddress:=("Kunden!" + sFirst), TextToDisplay:=("link")
Set rFind = wks1.Range("A22:A65536").FindNext(rFind)
row1 = rFind.Row
lrow = lrow + 1
Loop While sFirst rFind.Address
End If
Nun ist es aber leider so, daß jeder Link, der erzeugt wird, der gleiche es, also sich auf die gleiche Zelle bezieht. Wenn ich in dem Übersichtsblatt die Liste erzeuge (durch Kopieren und Einfügen aus dem Kunden-Blatt), dann verweist jeder Link auf die Zelle A22. Mach ich bei der Suche was falsch?
Viele Grüße,
Jörg
Anzeige
AW: Links auf Tabellenblatt aktualisieren
21.08.2009 14:51:50
Daniel
die Linkaddresse wird mit Hilfe der Variablen "sFirst" gebildet.
da auch diese innerhalb der Schleife nicht verändert wird, ist die Linkaddresse immer der gleiche, nämlich die der ersten Fundstelle.
Auch diese Variable musst du nach jedem neuen Fund neu anpassen, damit es auch nen neuen Link gibt.
allerdings solltest du nicht "sFirt" verwenden, da sonst dein Schleifenabbruch nicht mehr Funktioniert.
insgesamt würde ich da nicht soviel mit Variablen arbeiten, sondern direkt die Eigenschaften von "rFind" verwenden:
Do
rFind.Hyperlinks.Add Anchor:=rFind.offset(0,6), Address:="Kundenprojekte.xls", SubAddress:=(" _
Kunden!" & rFind.Address), TextToDisplay:=("link")
Set rFind = wks1.Range("A22:A65536").FindNext(rFind)
lrow = lrow + 1
Loop While sFirst  rFind.Address

Anzeige
AW: Links auf Tabellenblatt aktualisieren
21.08.2009 15:16:20
jorka
Alles klar. Das klappt soweit.
Jetzt ist nur noch das Problem, wenn ich dann aus der Übersicht auf den Link klicke, springt er zwar in das Tabellenblatt, der Link ist auch korrekt auf die Zelle bezogen, aber er geht immer auf die zuletzt aktive Zelle in dem Blatt.
Wenn ich also z.B. Zelle B5 zuletzt aktiviert hatte, dann auf die Übersicht gehe, dort die Liste erzeuge und dann auf den Link für A56 klicke, dann springt er in das Blatt ein, aber nicht zur Zelle A56, sondern zu B5. Woran liegt das denn?
Viele Grüße,
Jörg
AW: Sorry, kann ich nicht nachvollziehen.
21.08.2009 15:21:45
Daniel
kannst du ne Beispieldatei mit dem Fehler hochladen?
Gruß, Daniel
Anzeige
AW: Sorry, kann ich nicht nachvollziehen.
21.08.2009 16:03:42
Daniel
Hi
1. ist das ne alte datei, wo noch das Problem mit dem sFrist drin ist
2. ist es nicht notwendig, so ne kleine Datei auch noch zu zippen, das macht nur mehr aufwand und ich habe nicht vor, die Datei dauerhaft auf meinem Rechner zu speichern.
Gruß, Daniel
AW: Sorry, kann ich nicht nachvollziehen.
21.08.2009 16:12:59
jorka
das mit dem zip kam daher, daß ich mich beim hochladen bissl arg glatt angestellt hab. sorry dafür.
und das mit dem sfirst hab ich dann scheinbar nicht wirklich verstanden...
viele grüße,
jörg
Anzeige
AW: Sorry, kann ich nicht nachvollziehen.
21.08.2009 16:48:38
Daniel
Hi
nee ist meinfehler, ich habe deine Beispieldatei mit meiner alten Testdatei verwechselt, weil beide noch offen waren, du hats schon die richtige hochgeladen.
das Problem ist, daß du mit dem Hyperlink versuchst, eine geschützte Zelle anzuwählen, allerdings gleichzeitig über den Blattschutz die Selektion einer geschützten Zelle verbietest.
Somit ist die korrekte Ausführung des Hyperlinks nicht möglich und es bleibt einfach die alte Zelle selektiert.
zur Lösung des Problems hast du 2 Möglichkeiten
1. du erlaubst dem Anwender im Blattschutz, gesperrte Zellen auszuwählen
2. du gibst als Ziel für den Hyperlink eine nicht gesperrte Zelle an, da die Spalte B nicht _ geschützt ist, könnte das so gehen:

rFind.Hyperlinks.Add Anchor:=rFind.Offset(0, 6), Address:="Kundenübersicht.xls", SubAddress:=("Kunden!" & rFind.Offset(0, 1).Address), TextToDisplay:=("link")
Gruß, Daniel
Anzeige
AW: Sorry, kann ich nicht nachvollziehen.
21.08.2009 17:05:31
jorka
hey cool, das klappt super!!! herzlichen dank für die hilfe. :)
und nun noch eine letzte frage kurz vor dem wochenende:
wenn ich jetzt auf den link klicke und auf "kunden" rübergeleitet werde, erscheint die angewählte zelle aus dem link (wenn die zeilennummer größer als 22 ist, weil das formular für die dateneingabe das räumlich bedingt), am unteren bildschirmrand. gibt es eine möglichkeit, sie dann nach oben zu scrollen, damit sie am oberen bildschirmrand erscheint?
hier das fertige beispiel:
https://www.herber.de/bbs/user/63992.xls
ich hatte schonmal mit sowas rumprobiert, die aktive zelle nach oben zu scrollen, das hatte auch geklappt (wobei ich nicht mehr genau weiß, wie das ging), aber da beeinflusste das auch den bereich zwischen zeile 1 und 19, wo die daten eingegeben werden (auf dem blatt "Kunden"). das soll aber nicht sein, damit man den kompletten datensatz immer während des ausfüllens vor augen hat.
viele grüße und schonmal ein schönes wochenende,
jörg
Anzeige
AW: Sorry, kann ich nicht nachvollziehen.
21.08.2009 17:45:53
Daniel
Hi
also ich würde erstmal komplett auf die Hyperlinks verzichten, das ist viel zu aufwendig.
machs doch einfach so
1. du ergänzt das Makro zum erstellen der Übersicht um diese Zeile (fett):
Do
rFind.EntireRow.Copy wks2.Cells(lrow, 1)
wks2.Cells(lrow, 7).Value = rFind.Offset(0, 1).Address
Set rFind = wks1.Range("A22:A65536").FindNext(rFind)
lrow = lrow + 1
Loop While sFirst  rFind.Address
2. du schmeißt aus der Kundenliste die Hyperlinks raus und den Code zum Erstellen der Hyperlinks ebenfalls
3. du fügst im Modul des Tabellenblatts "Übersicht" diesen Code hinzu:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Zelle As Range
Set Zelle = Cells(Target.Row, 7)
If Left$(Zelle.Value, 1) = "$" Then
Application.Goto Sheets("Kunden").Range(Zelle.Value)
ActiveWindow.ScrollRow = ActiveCell.Row
Cancel = True
End If
End Sub

dann wird bei einem Doppelklick auf die entsprechende Zeile die angegebene Zelle im Blatt "Kunden" angesprungen und an den oberen Bildschirmrand gescrollt
das ist einfacher als Hyperlinks
Gruß, Daniel
Anzeige
AW: Sorry, kann ich nicht nachvollziehen.
24.08.2009 11:23:57
jorka
Hi Daniel,
eine sehr elegante Lösung. Vielen Dank nochmal für die Hilfe.
Viele Grüße,
Jörg

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige