Bin auf der Suche nach einer alternativen Lösung zu meinem bereits funktionierenden Weg.
Keine Beispieldatei, aber ein Makro, das alles beschreibt (damit auch alle helfen können, die keine fremden makrobeladenen Dateien runterladen wollen).
Dieses Makro in das Tabelle1-Modul kopieren, dann eine beliebige Zelle im Bereich "C2:K10" ändern, damit das Makro ausgelöst wird.
Ich möchte bestimmte Zellen mit nur einem Parameter (Spalte) ansprechen. Der Rest steht im Makro.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rBereich As Range 'Gegebener Bereich
Dim rZelle As Range 'Auslöser-Zelle
Dim Reihe
'Vorbereitung
Set rBereich = Range("C2:K10") 'Einen Bereich festlegen
rBereich.Interior.Color = vbGreen 'Diesen mal grün einfärben
'Jetzt geht's los
For Each rZelle In Target
If Not Application.Intersect(rZelle, rBereich) Is Nothing Then
' Als Beispiel für das Ansprechen bestimmter Zellen soll hier
' die zweite und fünfte Zelle der Zeile der bearbeiteten rZelle
' innerhalb vom rBereich eingefärbt werden.
' Hier meine Lösung:
Dim lZeilennummer As Long
With rBereich
lZeilennummer = rZelle.Row - .Row + 1
.Cells(lZeilennummer, 2).Interior.Color = vbRed
.Cells(lZeilennummer, 5).Interior.Color = vbRed
End With
' Nun mein Problem:
' Mich stört, dass ich da erst lZeilennummer bestimmen muss, und dass die
' gewünschten Zellen mit dieser lZeilennummer angesprochen werden müssen.
' Kann man da nicht direkt einen Range bilden, der nur jene Zeile innerhalb von
' rBereich umfasst, in der rZeile liegt?
'set Reihe = ?
' Ziel: Die gewünschten Zellen 2 und 5 einparametrig anzusprechen.
' Ungefähr so:
With rBereich
'Reihe(2).Interior.Color = vbCyan
'Reihe(5).Interior.Color = vbCyan
End With
End If
Next rZelle 'Auf zur nächsten Zelle,
'nur für den Fall, dass gleichzeitig mehrere Zellen
'verändert wurden.
End Sub
' Und tschüssIch habe mich bemüht, verständlich und klar zu beschreiben.
LG, Barbara