Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Farbe als Bedingung

Betrifft: Farbe als Bedingung von: Tinu
Geschrieben am: 18.05.2005 10:49:12

Liebe VBA-Spezialisten

Ich möchte ein Makro abhängig machen von der Farbe der angewählten Zellen. Das Problem ist nun, dass ich mehrere Zellen gleichzeitig anwählen will und die Zellen unterschiedliche Farben haben können. Das Makro soll dann ausgeführt werden, wenn alle Zellen entweder color index 8, 36 oder eine Kombination der beiden haben. Die Bedingung "If Selection.Interior.ColorIndex = 8" ist aber nur dann erfüllt, wenn alle Zellen die Farbe 8 haben (genau so natürlich mit 36). Eine ODER-Verknüpfung (8 oder 36) bringt also nichts, weil beide Bedingungen nicht erfüllt sind, wenn beide Farben vorkommen. Wie könnte man das lösen?

Für Hilfe wäre ich sehr dankbar!

Grüsse
Tinu

  


Betrifft: AW: Farbe als Bedingung von: Volker
Geschrieben am: 18.05.2005 11:15:22

Hallo Tinu,

meines Wissens bezieht sich selection.colorindex auch bei mehreren markierten Zellen nur auf die Zelle links oben.
Du könntest eine Schleife über deine Selection laufen lassen:
(das auszuführende nenne ich mal dein_makro()
mal ein Ansatz:

Sub gleiche_farbe()
dim zelle as range
if Selection.Interior.ColorIndex = 8 then
for each zelle in selection
if zelle.Interior.ColorIndex <> 8 then goto weiter
end if
next
dein_makro   'Aufruf deines Makros
else if Selection.Interior.ColorIndex = 36 then
for each zelle in selection
if zelle.Interior.ColorIndex <> 36 then goto weiter
end if
next
dein_makro   'Aufruf deines Makros
end if
weiter:
End Sub


Geht vielleicht noch eleganter, aber sollte klappen.

Gruß
Volker


  


Betrifft: AW: Farbe als Bedingung von: Reinhard
Geschrieben am: 18.05.2005 11:26:04

Hallo Volker,
wenn schon so dann so:
Sub gleiche_farbe()
dim zelle as range
for each zelle in selection
    if zelle.Interior.ColorIndex <> 8 or zelle.Interior.ColorIndex <> 36 then goto weiter
end if
dein_makro   'Aufruf deines Makros
weiter:
End Sub

Gruß
Reinhard


  


Betrifft: hab den bug schon bemerkt. (o.T.) von: Volker
Geschrieben am: 18.05.2005 11:29:54

.


  


Betrifft: Korrektur von: Volker
Geschrieben am: 18.05.2005 11:28:54

Hallo Tinu,

da hab ich wohl gepennt. Das Makro soll laufen, wenn keine Farbe außer "8" oder "36" vorkommt, gelle.
Dann wird die Sache kürzer:

Sub gleiche_farbe()
dim zelle as range
if Selection.Interior.ColorIndex = 8 or Selection.Interior.ColorIndex = 36 then
for each zelle in selection
if zelle.Interior.ColorIndex <> 8 or zelle.Interior.ColorIndex <> 36 then goto weiter
end if
next
dein_makro   'Aufruf deines Makros
end if
weiter:
End Sub


Wobei Reinhards Variante auch nicht schlecht ist.

Gruß
Volker


  


Betrifft: AW: Farbe als Bedingung von: Tinu
Geschrieben am: 18.05.2005 11:49:07

Hallo Volker

Vielen Dank für Deine rasche Antwort.
Leider bringt sie noch nicht den gewünschten Erfolg.
Zuerst habe ich Deinen Code 1:1 übernommen. Dann schimpft das Programm bei den "End Ifs", darum hab ich sie rausgenommen. Ausserdem wird das "Else If" nicht akzeptiert. Ich hab's durch "If" ersetzt. Mein Code sieht nun also folgendermassen aus:

Dim zelle As Range
If Selection.Interior.ColorIndex = 8 Then
For Each zelle In Selection
If zelle.Interior.ColorIndex <> 8 Then GoTo weiter
'End If
Next
' mein Makro
If Selection.Interior.ColorIndex = 36 Then
For Each zelle In Selection
If zelle.Interior.ColorIndex <> 36 Then GoTo weiter
'End If
Next
'mein Makro
weiter:
End If
End Sub

Das Resultat ist, dass das Makro ausgeführt wird, wenn alle angewählten Zellen Farbe 8 haben. Sonst tut sich gar nichts.

Gruss
Tinu


  


Betrifft: AW: Farbe als Bedingung von: Tinu
Geschrieben am: 18.05.2005 11:54:44

Hallo Volker und Reinhard

hab gar nicht bemerkt, was da alles reinkam, während ich bastelte ;-)

Tatsache ist, dass es mit Euerer Hilfe jetzt klappt und ich bedanke mich ganz herzlich dafür.

Gruss
Tinu


  


Betrifft: gern geschehen (o.T) von: Volker
Geschrieben am: 18.05.2005 12:09:21

.


  


Betrifft: AW: Farbe als Bedingung von: Reinhard
Geschrieben am: 18.05.2005 11:18:46

Hallo Tinu,
Sub tt()
For Each Zelle In Selection
    If Zelle.Interior.ColorIndex = 1 Or Zelle.Interior.Color = 2 Then anz = anz + 1
Next Zelle
If anz = Selection.Cells.Count Then MsgBox "jepp"
End Sub

Gruß
Reinhard


 

Beiträge aus den Excel-Beispielen zum Thema "Farbe als Bedingung"