1.7k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo, wer weiß Rat?
Ich habe eine Zahlenreihe in Spalte A, die laufend erweitert wird.
Jede Zahl ist mit einem Hyperlink auf das Tabellenblatt 2 versehen.
A1-A3 verweist jeweils auf Zelle E1
A4-A5 verweist jeweils auf Zelle E2
A6-A10 verweist jeweils auf Zelle E3
usw.
Nun möchte ich bei Ergänzungen der Zahlenreihe in Spalte A, dass die Nachbarzellen (Spalte B) der Hyperlinks mit gleichen Zielzellen sich abwechselnd färben.
Also B1-B3 gelb
B4-B5 rot
B6-B10 wieder gelb, usw.

Danke für Lösungsvorschläge!

reinri

19 Antworten

0 Punkte
Beantwortet von
Hallo reinri,

wenn du die Zahlenreihe in Spalte A nur "ergänzt" existiert noch kein Link. Wie wird denn der Hyperlink bei Eintragen einer neuen Zahl gesetzt? Gibt's da schon ein Makro oder machst du das manuell? Nach welchen Bedingungen richtet sich das Link-Ziel? Mal hast du hier zwei Links, mal vier die auf das gleiche Ziel verweisen?

Gruß Mr. K.
0 Punkte
Beantwortet von
Hallo Mr. K.

Ja, wenn ich die Zahlenreihe ergänze, füge ich die Links in die ergänzte Zahlenreihe manuell ein. Wieviele aufeinanderfolgende Zellen in Spalte A auf dieselbe Linkadresse verweisen, ist unterschiedlich.
z.B. wenn ich während einer Reise (=E1) 3 Flüge absolviert habe, dann verweisen eben die drei Links A1-A3 auf E1.

LG reinri
0 Punkte
Beantwortet von
Hallo reini,

sorry, dass ich mich jetzt erst melde. Bin eben erst heim
gekommen.

Sowas in der Art dachte ich mir schon. Das macht das Ganze etwas
schwieriger. Leider gibt es kein Event, das auf das Einfügen von
Hyperlinks reagiert um das gewünschte Ergebnis zu erzielen. Das
heißt aber nicht, dass es nicht möglich wäre deinem Wunsch zu
entsprechen. Im Gegenteil, da gibt es viele Möglichkeiten, die aber
leider alle etwas umständlich sind. Auch ist das Erzeugen des Links
eine ziemliche Fummelei. Damit du dir also nicht so viel Arbeit
machen musst, habe ich hier mal eine einfache Alternative kreiert.

Starte den VBA-Editor (z.B. mit Alt+F11) und gib im Modul, das
deinem Tabellenblatt entspricht folgenden Code ein:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Row > 1 Then
If Target.Offset(-1, 0).Hyperlinks.Count > 0 Then
Link = Target.Offset(-1, 0).Hyperlinks(1).SubAddress
p = InStr(1, Link, "!")
If p > 0 Then
Blatt = Left(Link, p - 1)
Zelle = Right(Link, Len(Link) - p)

If ActiveCell.Address = Target.Address Then
Zelle = Sheets(Blatt).Range(Zelle).Offset(1, 0).AddressLocal
End If

Target.Hyperlinks.Add Target, "", Blatt & "!" & Zelle, Zelle,
Target.Value
Target.Offset(0, 1).Interior.Color =
Sheets(Blatt).Range(Zelle).Interior.Color
End If
End If
End If

End Sub

Wenn du nun einen neuen Eintrag in Spalte A eingibst und die
Eingabe wie gewohnt abschließt, wird der Link der
darüberliegenden Zelle kopiert.
Schließt du hingegen deine Eingabe mit STRG+ENTER ab wird die
aktive Zelle danach nicht verschoben, dafür aber das Link-Ziel um
eine Zelle runtergesetzt. Damit ist die Linkeingabe recht simpel und
die Farben können sich direkt daran orientieren. Probiers mal aus
:-)

Sollte dein Wunsch darüber hinausgehen, sag einfach Bescheid.

L.G. Mr. K.
0 Punkte
Beantwortet von
seit wann gibts innerhalb von Codezeilen Zeilenumbrüche?
Target.Value muss hinter Zelle und Sheets(Blatt) hinter das =

Ich probiers nochmal:
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Row > 1 Then
If Target.Offset(-1, 0).Hyperlinks.Count > 0 Then
Link = Target.Offset(-1, 0).Hyperlinks(1).SubAddress
p = InStr(1, Link, "!")
If p > 0 Then
Blatt = Left(Link, p - 1)
Zelle = Right(Link, Len(Link) - p)

If ActiveCell.Address = Target.Address Then
Zelle = Sheets(Blatt).Range(Zelle).Offset(1, 0).AddressLocal
End If

Target.Hyperlinks.Add Target, "", Blatt & "!" & Zelle, Zelle,
Target.Value
Target.Offset(0, 1).Interior.Color =
Sheets(Blatt).Range(Zelle).Interior.Color
End If
End If
End If

End Sub
0 Punkte
Beantwortet von
Uups, da hab ich mal wieder nicht richtig gelesen. Du wolltest ja gar
nicht die Farbe der Zielzelle übernehmen sondern selbst zwischen
zwei Farben wählen. Hier der geänderte Code - diesmal mit
Zeilentrennzeichen, damit der Code ausführbar bleibt. 68 Zeichen
ist nicht gerade viel Platz. Das zerstört die Übersichtlichkeit beim
Objektaufbau. Ich hoffe du kannst ihn trotzdem erkennen.

Private Sub Worksheet_Change(ByVal Target As Range)
'|

Const Gelb = 65535
Const Orange = 39423
Const Rot = 255

If Target.Row > 1 Then
If Target.Offset(-1, 0).Hyperlinks.Count > 0 Then
Link = Target.Offset(-1, 0).Hyperlinks(1).SubAddress
p = InStr(1, Link, "!")
If p > 0 Then
Blatt = Left(Link, p - 1)
Zelle = Right(Link, Len(Link) - p)

If ActiveCell.Address = Target.Address Then
Zelle = Sheets(Blatt).Range(Zelle).Offset(1, 0).AddressLocal
Target.Offset(0, 1).Interior.Color _
= IIf(Target.Offset(-1, 1).Interior.Color _
= Gelb, Orange, Gelb)
Else
Target.Offset(0, 1).Interior.Color _
= Target.Offset(-1, 1).Interior.Color
End If

Target.Hyperlinks.Add Target, "", Blatt & "!" & Zelle _
, Range(Zelle).AddressLocal, Target.Value
End If
End If
End If

End Sub


L.G. Mr. K.
0 Punkte
Beantwortet von
und hier noch eine kleine Verbesserung, da Excel aus mir noch
unbekannten Gründen den Link mal mit und mal ohne Bezug auf
das aktive Tabellenblatt anlegt.

Private Sub Worksheet_Change(ByVal Target As Range)
'|

Const Gelb = 65535
Const Orange = 39423
Const Rot = 255

If Target.Row > 1 Then
If Target.Offset(-1, 0).Hyperlinks.Count > 0 Then
Link = Target.Offset(-1, 0).Hyperlinks(1).SubAddress
p = InStr(1, Link, "!")
If p > 0 Then
Blatt = Left(Link, p - 1)
Zelle = Right(Link, Len(Link) - p)
Else
Blatt = Target.Parent.Name
Zelle = Link
End If

If ActiveCell.Address = Target.Address Then
Zelle = Sheets(Blatt).Range(Zelle).Offset(1, 0).AddressLocal
Target.Offset(0, 1).Interior.Color _
= IIf(Target.Offset(-1, 1).Interior.Color _
= Gelb, Orange, Gelb)
Else
Target.Offset(0, 1).Interior.Color _
= Target.Offset(-1, 1).Interior.Color
End If

Target.Hyperlinks.Add Target, "", Blatt & "!" & Zelle _
, Range(Zelle).AddressLocal, Target.Value
End If
End If

End Sub

die Funktionsweise bleibt aber gleich: normale Eingabe kopiert den
Link von oben. Eingabe mit STRG+ENTER legt einen Link um eine
Zelle verschoben an.
0 Punkte
Beantwortet von
Hallo Mr.K.
danke für die umfangreiche Makrokonstruktion!
Klappt aber nicht, beim Debuggen werden die 2 Zeilen

Target.Hyperlinks.Add Target, "", Blatt & "!" & Zelle _
, Range(Zelle).AddressLocal, Target.Value

gelb unterlegt.

Das Linkkopieren per Makro wäre gar nicht wichtig, nur das automatische Einfärben der Nachbarspalte.

LG reinri
0 Punkte
Beantwortet von
Hallo reinri,

Bei mir funktionierts in Allen Testvarianten.
Hast du für den Code die letzte Version aus Antwort 6 verwendet?
Damit sollte eigentlich das von dir beschriebene Problem nicht vorkommen. Welche Schritte machst du denn, damit das Problem auftritt?

Natürlich kannst du die Problem-Zeile auch löschen und den Link von Hand setzen. Ist aber umständlicher.

Der Zugriff auf den überliegenden Link ist deshalb wichtig um festzustellen, auf welche Zielzelle er sich bezieht und davon abhängig die Farbe zu ermitteln. Außerdem brauchst dann nicht so viel klicken.

Ich gehe natürlich davon aus, dass sich das Linkziel in der gleichen Datei befindet und mindestens Zelle A1 bereits einen Link besitzt.

Natürlich gibt es noch eine Andere Möglichkeit. Die ist aber ziemlich umständlich und für Deinen Fall eigentlich nicht nötig. Falls du sie dennoch brauchst, melde ich mich heute Abend noch mal dazu.

Gruß Mr. K.
0 Punkte
Beantwortet von
Hallo Mr.K.
Mit Laien wie mich ist es nicht einfach...
Übrigens, ich verwende Excel 2002.
Also ich schreibe im Tabellenblatt 1 in A1 die Zahl 1 und erzeuge einen Link zu E1 in Tabellenblatt 2 der selben Datei.

Wenn ich dein Makro von Antwort 6 im VBA in "Tabelle1" eingegeben habe, und danach in A2 die Zahl 2 eingebe, kommt die gelbe Fehlermeldung laut Antwort 7 und rund um die Zelle B2 verschwinden die grauen Hilfslinien...

Wenn ich dein Makro von Antwort 6 im VBA in "Diese Arbeitsmappe" eingegeben habe und danach in A2 die Zahl 2 eingebe, dann bleibt die Schriftfarbe aber schwarz und ohne Link, statt blau und mit Link.

Die Zellen verfärben sich in Spalte B in beiden Fällen nicht.

LG reinri
0 Punkte
Beantwortet von
OK jetzt weiß ich worans liegt. Ich hab immer mit Text getestet, du gibst aber Zahlen ein. Ersetze die Problemzeile durch

Target.Hyperlinks.Add Target, "", Blatt & "!" & Zelle _
, Range(Zelle).AddressLocal, Str(Target.Value)

damit sollte es funktionieren. Sorry für den Bug.

Die Hilfslinien verschwinden nur dann, wenn die Farbe "weiß" der überliegenden Zelle bei gleichem Linkziel übernommen wird. Zelle B1 sollte also auch bereits eine Farbe haben, welche übernommen werden kann. Um auf die andere Farbe zu switchen und das Linkziel zu versschieben, schließe deine Eingabe mit STRG+Enter ab.

Möchtest du eine andere Farbe nutzen, kannst du deren Code leicht in einem beliebigen Modul mit folgendem Makro ermitteln. Markiere dazu die gewünschte Zelle, die die Farbe enthält, klicke dann einfach in den Code und drücke F5.

Sub FarbeErmitteln()
MsgBox ActiveCell.Interior.Color
End Sub

Gruß Mr. K.
...