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

Farbe bei betreten der Zelle

Farbe bei betreten der Zelle
Stefanglander
Hallo Forum,
habe hier etwas sehr interessantes gefunden.
Option Explicit
Function ColorFromPallet(Optional lOldCol As Double = xlNone) As Double
Dim dSavCol As Double, dNewCol As Double
Dim iRGB_R As Integer, iRGB_G As Integer, iRGB_B As Integer
dSavCol = ActiveWorkbook.Colors(32)
If lOldCol = xlNone Then
ColIx2RGB 13160660, iRGB_R, iRGB_G, iRGB_B
Else
ColIx2RGB lOldCol, iRGB_R, iRGB_G, iRGB_B
End If
If Application.Dialogs(xlDialogEditColor).Show _
(32, iRGB_R, iRGB_G, iRGB_B) Then
ColorFromPallet = ActiveWorkbook.Colors(32)
ActiveWorkbook.Colors(32) = dSavCol
Else
ColorFromPallet = lOldCol
End If
End Function
Sub ColIx2RGB(ByVal lCol As Long, _
iR As Integer, iG As Integer, iB As Integer)
iR = lCol Mod 256: lCol = lCol \ 256
iG = lCol Mod 256: lCol = lCol \ 256
iB = lCol Mod 256
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rZellen As Range
Dim LColor As Double
Set rZellen = Intersect(Target, Range("a1:a3"))
If Not rZellen Is Nothing Then
LColor = ColorFromPallet
If LColor xlNone Then
rZellen.Interior.Color = LColor
ElseIf MsgBox("Sollen die Farben im Bereich gelöscht werden?", vbYesNo) = vbYes Then
rZellen.Interior.Color = xlNone
End If
End If
End Sub

Wie muss ich den Code ändern das nicht mehr der Bereich A1:A3 sondern A1:A3, C4 und F5:F8 angesprochen werden?
Danke vorab
Stefan
Denk mal nach
13.08.2009 22:38:17
{Boris}
Hi Stefan,
...besonders über diese Zeile:
Set rZellen = Intersect(Target, Range("a1:a3"))
Grüße Boris
AW: Farbe bei betreten der Zelle
13.08.2009 22:41:49
Tino
Hallo,
mach aus der Zeile
Set rZellen = Intersect(Target, Range("a1:a3"))
diese
Set rZellen = Intersect(Target, Union(Range("A1:A3"), Range("F5:F8"), Range("C4")))
Gruß Tino
Wozu die Union-Methode?
13.08.2009 22:54:01
{Boris}
Hi Tino,
Range("A1:A3, C4, F5:F8")
Grüße Boris
Gewohnheitssache
13.08.2009 22:59:20
Tino
Hallo,
ist so ne Gewohnheit von mir, hast aber recht.
Gruß Tino
OK ;-) oT
13.08.2009 23:05:29
{Boris}
...
Kleine Einschränkung der RANGE-Methode
13.08.2009 23:16:36
NoNet
Hey Tino,{Boris}, Stefan,
ein Argument, das GEGEN RANGE() spricht (allerdings wohl nur sehr selten auftreten dürfte) :
Der STRING, der als Argument für RANGE(strBereich) angegeben werden kann, darf max.254 Zeichen lang sein :
Das funktioniert (Argument ist 253 Zeichen lang):
Range("A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20," & _
"A21,A22,A23,A24,A25,A26,A27,A28,A29,A30,A31,A32,A33,A34,A35,A36,A37,A38,A39,A40," & _
"C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20," & _
"C21,C22,C23,C24,C25,C26,C27,C28").Select

Das funktioniert nicht mehr (Argument ist 257 Zeichen lang) :
Range("A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20," & _
"A21,A22,A23,A24,A25,A26,A27,A28,A29,A30,A31,A32,A33,A34,A35,A36,A37,A38,A39,A40," & _
"C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20," & _
"C21,C22,C23,C24,C25,C26,C27,C28,C29").Select
Gruß, NoNet
Anzeige
Ich zähle: 18 Zeichen...
13.08.2009 23:19:44
{Boris}
Hi NoNet,
für
"A1:A3, C4, F5:F8"
Sollte also noch reichen ;-)
Und ist die Union-Methode nicht auch irgendwie begrenzt?
Grüße Boris
ist mir zu viel zu tippen ;-) oT.
13.08.2009 23:27:46
Tino
Etwas weniger zu tippen : VBA
13.08.2009 23:40:47
NoNet
Hey Tino,
ca. die Hälfte der Tipparbeit kannst Du Dir per VBA sparen :
strBereich="" : for z=0 to 68 : strBereich = strBereich & cells(z mod 40+1,2*((z+40) \ 40)-1).address(0,0) & "," : next : ?strBereich
Gruß, NoNet
hoffentlich blickt Stefan noch durch. ;-) oT.
13.08.2009 23:48:02
Tino
BTW: Range ist eine EIGENSCHAFT...
13.08.2009 23:30:47
{Boris}
Hi Nonet,
...und keine Methode;-)
*klugscheissermodusaus* ;-)
Grüße Boris
Da nehme ich MS ohnehin nicht ernst
13.08.2009 23:47:36
NoNet
Hey Boris,
da hast Du Recht, aber bei der Inkonsequenz von MS habe ich mich nur angeschlossen.
Streng genommen müsste RANGE() nämlich ein Object sein und keine Eigenschaft (schon gar keine Methode !).
Eigenschaften sind streng genommen Properties wie z.B .Color oder .ColorIndex oder .Value - aber leider vermischt das VBA ziemlich kunterbunt und aus Objekten werden unerklärlicherweise Methoden oder Eigenschaften...
Salut, NoNet
Anzeige
Nicht ganz...
13.08.2009 23:58:37
{Boris}
Hi NoNet,
Range, ist eine Eigenschaft, die ein Range-Objekt zurückgibt!
Aber irgendwie hast Du auch Recht ;-)
Grüße Boris
AW: Nicht ganz...
14.08.2009 01:17:50
Daniel
Hi
ich hab von der Sache jetzt zwar nicht so viel Ahnung, aber ich würde mal sagen RANGE ist weder Objekt noch Eigenschaft, sondern RANGE ist eine Sammlung von Objekten der Gruppe Cells.
deswegen kann man einer Range eine Eigenschaft zwar zuweisen, z.B. Colorindex, allerdings bekommt dann nicht die Range diese Eigenschaft (weil die Range kein Objekt ist und somit keine eigenständigen Eigenschaften hat), sondern jedes einzelne Cells-Objekt bekommt diese Eigenschaft zugewiesen,
aber man kann diese Eigenschaft nicht abfragen, weil kein eindeutiges Ergebnis rauskommt, da jedes einzelne Cells-Objekt der Range diese Eigenschaft anders belegt haben kann (ok, es funktioniert, aber nur wenn alle Cells-Objekte der Range diese Eigenschaft gleich besetzt haben)
Gruß, Daniel
Anzeige
Cells ist eine Eigenschaft, die 1 Range-Objekt...
14.08.2009 02:15:31
Luc:-?
...zurückgibt, das aus einer oder mehreren Zellen besteht, Daniel.
Cells(1, 1) gibt dasselbe zurück wie Range("A1"), das Range-Objekt Zelle A1... ;-)
Ansonsten hat Boris recht, wenn er sagt: "Range ist eine Eigenschaft, die ein Range-Objekt zurückgibt..." In Word sind das dann nicht Zellen, sondern der beschriebene Bereich bspw eines Absatzes.
Das ist so wie mit den us-engl Substantiven, die auch ganz schnell mal unverändert als Verb eingesetzt wdn können, oder US-Familiennamen, die auch als Vornamen verwendet wdn dürfen...
Also letztlich doch folgerichtig universell (us-)logisch oder... ;-)
Leider ist die Aufzählungsmöglichkeit von Intersect nicht analog nutzbar, da dann alle Range-Argg in einer Zelle=Target übereinstimmen müssten! Außerdem muss zwingend so wie von Boris und NoNet getan notiert wdn, wenn auf Union verzichtet wdn soll. Die Notation Range("A1","C3") ist gleichbedeutend mit Range(Cells(1, 1), Cells(3, 3)) und folglich mit Range("A1:C3")!
Grüße Luc :-?
Anzeige
Range als Eigenschaft und Objekt
14.08.2009 11:23:33
Erich
Hi Daniel,
dass Range sowohl Eigenschaft als auch Objekt sein kann, hat Boris ja schon geschrieben.
Range kann keine "Sammlung von Objekten der Gruppe Cells" sein:
  • Eine Gruppe (meint vielleicht "Klasse") Cell oder Cells gibt es nicht.

  • Cells ist eine Eigenschaft (von Application oder Range) oder eine Methode von Worksheet,
    die ein Range-Objekt zurück gibt.

  • Wenn man einem Range-Objekt (richtig: dessen Interior-Objekt) z. B. einen ColorIndex zuweist,
    dann hat das Range.Interior-Objekt diese Eigenschaft,
    bis sie (evtl. auch für einzelne Zellen der Range) geändert wird.
    Man kann auch dann die ...Interior.ColorIndex-Eigenschaft noch abfragen,
    bekommt dann eben als Antwort ein "undefiniert".
    Warum auch nicht - nicht jede Eigenschaft jedes Objekts muss immer einen "erhofften" Wert haben.
    Der Wert "undefiniert" beinhaltet ja auch eine Information: Im Range kommen unterschiedliche Farben vor.
    Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
    Anzeige
    Danke Boris und Tino (o.T.)
    14.08.2009 14:36:29
    Stefanglander
    .

    306 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige