HERBERS Excel-Forum - das Archiv
Zellen Formatieren
Joachim

Hallo,
wie muss ich denn Target in Set RaBereich = Intersect(RaBereich, Range(Target.Address)) definieren.
Da kommt immer eine Fehlermeldung:
Private Sub CommandButton3_Click()
Dim RaBereich As Range, RaZelle As Range
Set RaBereich = Range("R")
Set RaBereich = Intersect(RaBereich, Range(Target.Address))
If RaBereich Is Nothing Then Exit Sub
For Each RaZelle In RaBereich
With RaZelle
Select Case UCase(.Value) ' UMWANDLUNG DER Eingabe in Großbuchstaben
Case "GREEN"
.Interior.ColorIndex = 4
.Font.ColorIndex = 1
Case "RED"
.Interior.ColorIndex = 3
.Font.ColorIndex = 1
Case "YELLOW"
.Interior.ColorIndex = 6
.Font.ColorIndex = 1
Case "BLUE"
.Interior.ColorIndex = 5
.Font.ColorIndex = 1
End Select
End With
Next RaZelle
Set RaBereich = Nothing
End Sub

Danke
Joachim

AW: Zellen Formatieren
Björn

Hallo,
Code woanders herkopiert, was? ;-)
DAs funktioniert so nicht. Du hast Target nicht definiert.
Das ist aus einem SelectionChange Ereignis, das gibt dann das Target mit.
Wenn du das ganze über CommandButtpn aufrufst, dann fehlt das.
Was genau möchtest du denn? Was soll wann passieren?
Gruß
Björn
AW: Zellen Formatieren
Joachim

Hi,
ich möchte einfach die Spalte R durchlaufen , und entsprechend dem Eintrag den Hintergrund färben.
das ist eigentlich alles.
GRuss
Joachim
AW: Zellen Formatieren
Björn

Dann versuch es mal so.
Schau dir bitte auch die anderen Antworten an.
Hab meine "Kürzung" mit eingebaut, und auch ein "Case Else" dazu gemacht. Erklärung im Code.
Den Bereich solltest Du wenn möglich eingrenzen, dass nicht alle Zellen geprüft werden müssen.
Gruß
Björn B.
Private Sub CommandButton3_Click()
Dim RaBereich As Range, RaZelle As Range
Set RaBereich = Range("R:R")
'Makro wird schneller, wenn Du den Bereich engrenzen kannst, so werden über 65000 Zellen  _
gecheckt
'Eingrenzen z.B. so: Range("R1:R100")
For Each RaZelle In RaBereich
With RaZelle
.Font.ColorIndex = 1
Select Case UCase(.Value) ' UMWANDLUNG DER Eingabe in Großbuchstaben
Case "GREEN"
.Interior.ColorIndex = 4
Case "RED"
.Interior.ColorIndex = 3
Case "YELLOW"
.Interior.ColorIndex = 6
Case "BLUE"
.Interior.ColorIndex = 5
'Hier wird Zellfarbe auf "keine Füllung" gesetzt. Sonst bleibt es rot oder blau,
'wenn man den Wert wieder löscht
Case Else
.Interior.ColorIndex = xlNone
End Select
End With
Next RaZelle
Set RaBereich = Nothing
End Sub

Danke, so passts owT
Joachim

Woher soll Excel wissen, was "TARGET" ist ?
NoNet

Hallo Joachim,
das Objekt "TARGET" ist hier weder deklariert (mit DIM) noch definiert (mit SET).
woher soll Excel/VBA oder auch WIR denn wissen, was TARGET ist ?
Dieses Objekt existiert standardmässig nur in Excel Ereignismakros automatisch, wie z.B. in folgenden :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Private Sub Worksheet_Change(ByVal Target As Range)
etc.

Wie Du erkennen kannst, wird das Objekt hier (im Gegensatz zu Deinem Codebeispiel) bereist im Prozedurkopf deklariert (BYVAL).
Ich könnte mir vorstellen, dass du z.B. die markierten Zellen einfärben möchtest, dazu müsstest Du die SET-Anweisung austauschen :
Set RaBereich = Intersect(RaBereich, Selection)
Falls es das nicht war, dann beschreibe bitte exakt, WAS Du möchtest.
Gruß, NoNet
PS: Ist Range("R") ein definierter Bereichsnamen oder soll das die Spalte R sein ?
Falls es die Spalte R sein soll, dann bitte Code ändern : Set RaBereich = Columns("R:R")
kürzer...
Björn

da du immer den gleichen Wert für Font.ColorIndex setzt, brauchst du das nicht in die Case-Anweisung jedes mal einbauen.
Hier reicht also:

With RaZelle
.Font.ColorIndex = 1  'reicht hier einmal!
Select Case UCase(.Value) ' UMWANDLUNG DER Eingabe in Großbuchstaben
Case "GREEN"
.Interior.ColorIndex = 4
Case "RED"
.Interior.ColorIndex = 3
Case "YELLOW"
.Interior.ColorIndex = 6
Case "BLUE"
.Interior.ColorIndex = 5
End Select
End With
Da es sich aber um den Standardwert handelt (Schwarz), könntest du es auch ganz weg lassen, wenn es dir nur um die Zellfarbe geht.
Gruß
Björn
Danke dir auch owT
Joachim

"TARGET" ist Finanzmathematik
WF

ausgeschrieben:
Transeuropean Automated Real-time Gross settlement Express Transfer system
Salut WF
Da hinten aus der letzten Ecke wieder... ;-)
NoNet

Hey WF,
das sind mir ja die "Richtigen" : Keine Ahnung vom "Saufen" (VBA) haben, aber mit den großen Hunden mitpinkeln wollen ;-)
Das mit dem TARGET hättest Du ja auch mal früher sagen können...
Gruß, NoNet
..wo hast du denn das her ? :-) Gruß
robert

Ganz einfach : Rechtsklick - Eigenschaften ;-) _oT
NoNet

_oT
OT:Hi folks, get warmed up...
Renee

don't cool down ;-)
Renée will be back in around 3 weeks....
Hi, Renée, someone is hardly waiting for...
Luc:-?

...you - you gave him your mailaddress 2 years ago and he tried to contact you, not knowing anything about the following events...
Welcome, princess of the dark origin of mankind... ;-)
Luc :-?
Allerdings ist dein PS kein Standard-VBA,...
Luc:-?

...NoNet... ;-)
R als Bereichsname ist nicht zu empfehlen (mind RR oder unter xl12 RRRR). Ansonsten heißt es Range("R:R") oder besser Columns(18). Alles andere verursacht zusätzlichen Rechenaufwand!
Gruß Luc :-?
Mein "PS" empfiehlt auch keinen Bereichsnamen
NoNet

Moin Luc,
"Mein PS" enthielt keine Empfehlung zur Benamung eines Bereiches, sondern nur eine vermutete Nachfrage diesbezüglich bzw. eine Empfehlung für Columns("R:R").
Ich persönlich würde eine gesamte Spalte allenfalls "SpalteR" benennen oder besser noch "SprechenderNameFuerSpalteR".
Ob nun Range("R:R") oder Columns("R:R") oder Columns(18) - das sehe ich unabhängig der dafür benötigten Rechenzeit jedoch eher gelassen... ;-)
Gruß, NoNet
Bzgl Columns sehe ich das nicht so gelassen...
Luc:-?

...wie du, Thomas,
dazu gab's hier auch schon mal 'ne Diskussion... ;-)
Gruß Luc :-?