Moin!
Jetzt wollte ich heute Morgen einen Code für ein Kontextmenue schreiben und sehe, dass Uwe viel schneller war …
Nevertheless und nur ergänzend:
Ich würde nicht den .ColorIndex nehmen, da dieser auf unterschiedlichen Rechnern durchaus andere Farben erzeugen kann.
(gewollt oder ungewollt)
Statt dessen würde ich der Interior.Color-Eigenschaft eine der folgenden Farbkonstanten zuweisen, dann bist Du auf der sicheren Seite:
| A | B |
1 | Farbkonstante | Wert |
2 | vbBlack | 0 |
3 | vbRed | 255 |
4 | vbGreen | 65.280 |
5 | vbYellow | 65.535 |
6 | vbBlue | 16.711.680 |
7 | vbMagenta | 16.711.935 |
8 | xlNone | -4.142 |
Wenn man jetzt noch den Typ der Auswahl überprüft, kann man ohne Fehlermeldung die Selection einfärben.
Für rot würde ich es so machen:
Sub Hintergrundfarbe_setzen_Rot()
If TypeName(Selection) = "Range" Then
Selection.Interior.Color = vbRed
End If
End Sub
Gruß Ralf
(06.07.2018, 14:07)Klaus-Dieter schrieb: [ -> ]Es ist absolut unprofessionell Auswertungen nach Zellformaten vorzunehmen.
Moin Klaus-Dieter!
So absolut, wie Du das siehst, finde ich es nicht.
Warum sonst sollte Excel seit längerem das Filtern nach Farbe anbieten?
Dies iVm TEILERGEBNIS(3;…) (weil ja ein Text in der auszuwertenden Zelle steht) bietet durchaus eine
zusätzliche komfortable Auswertung.
Voraussetzung ist jedoch, dass die Farben nicht
ähnlich, sondern
identisch sein müssen.
Und genau darum geht es hier in diesem Thread …
Gruß Ralf
Hallo Ralf,
Zitat:Warum sonst sollte Excel seit längerem das Filtern nach Farbe anbieten?
nicht alles, was Excel anbietet, ist auch sinnvoll. Da fallen mir spontan die verbundenen Zellen außerhalb von Überschriften ein.
Was die Auswertung nach Zellformaten betrifft, hast du ja selbst durch deinen Hinweis auf das Vermeiden von ColorIndex auf Unzulänglichkeiten hingewiesen. Ich für mein Teil bevorzuge Statusmeldungen, nach denen man hervorragend, und vor allem zweifelsfrei auswerten kann.
Hallo Uwe und Ralf,
wie ich finde eine interessante Lösung. Kannte ich noch nicht und habe mich etwas belesen dazu.
CommandBars.Add
Zu diesem Parameter -- MenuBar -- finden sich leider unterschiedliche Erklärungen.
1. True, wenn die aktive Menüleiste durch die neue Befehlsleiste ersetzt werden soll. Der Standardwert ist False.
2. optional, legt fest, ob es sich um eine Menü- oder eine Symbolleiste handelt (TRUE = Menüleiste, FALSE = Symbolleiste, Voreinstellung ist FALSE).
Was ist hier nun zutreffend?
Ob eine Lösung mit CommandBars etwas für den einfachen Excelanwender ist wäre zu überlegen. Weil wenn man sich damit mit nicht wirklich auskennt, kann man sich durchaus die Excelmenüs erst mal verunstalten.
Eine alternative mit einer Listbox.
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
ListBox1.Left = ActiveCell.Left
ListBox1.Top = ActiveCell.Top
ListBox1.Clear
ListBox1.AddItem ("Rot")
ListBox1.AddItem ("Gelb")
ListBox1.AddItem ("Grün")
ListBox1.AddItem ("Keine")
ListBox1.Visible = True
Cancel = True
End Sub
Private Sub ListBox1_Click()
Select Case ListBox1.Text
Case "Rot"
ActiveCell.Interior.Color = vbRed
Case "Gelb"
ActiveCell.Interior.Color = vbYellow
Case "Grün"
ActiveCell.Interior.Color = vbGreen
Case "Keine"
ActiveCell.Interior.Color = xlNone
End Select
ListBox1.Visible = False
End Sub
Gruß Elex
(07.07.2018, 14:06)Elex schrieb: [ -> ]Ob eine Lösung mit CommandBars etwas für den einfachen Excelanwender ist wäre zu überlegen. Weil wenn man sich damit mit nicht wirklich auskennt, kann man sich durchaus die Excelmenüs erst mal verunstalten.
Moin!
Dafür gibt es ja die Parameter der
CommandBars.Add-Methode (Office)
Für das Kontextmenue ist die
MsoBarPosition entscheidend.
Statt Position:=5 kann man sich auch der Konstanten
msoBarPopup bedienen.
MenuBar bleibt auf dem Default False
Temporary:=True hilft bei unerwarteten Fehlern!
Der Anwender bekommt davon ja erst mal nichts mit, wenn man das Target vernünftig auswertet.
Gruß Ralf
Hi Ralf,
(07.07.2018, 09:01)RPP63 schrieb: [ -> ]Statt dessen würde ich der Interior.Color-Eigenschaft eine der folgenden Farbkonstanten zuweisen, dann bist Du auf der
Gute Idee.
(07.07.2018, 09:01)RPP63 schrieb: [ -> ]Wenn man jetzt noch den Typ der Auswahl überprüft, kann man ohne Fehlermeldung die Selection einfärben.
Das ist nicht unbedingt nötig, da das Makro nicht anders aufrufbar ist.
Ich habe das Ganze noch etwas aufgehübscht und vereinfacht:
' **************************************************************
' Modul: Tabelle3 Typ = Element der Mappe(Sheet, Workbook, ...)
' **************************************************************
Option Explicit
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True 'verhindert die Anzeige des normalen Kontextmenüs
With Application.CommandBars.Add("MeineFarben", msoBarPopup, , True)
'1. Untereintrag
With .Controls.Add(msoControlButton)
.FaceId = 6850
.Caption = "Rot"
.Parameter = vbRed
.OnAction = "Hintergrundfarbe_setzen"
End With
'2. Untereintrag
With .Controls.Add(msoControlButton)
.FaceId = 6859
.Caption = "Gelb"
.Parameter = vbYellow
.OnAction = "Hintergrundfarbe_setzen"
End With
'3. Untereintrag
With .Controls.Add(msoControlButton)
.FaceId = 6852
.Caption = "Grün"
.Parameter = vbGreen
.OnAction = "Hintergrundfarbe_setzen"
End With
'4. Untereintrag
With .Controls.Add(msoControlButton)
.FaceId = 6849
.Caption = "Farblos"
.Parameter = -4142
.OnAction = "Hintergrundfarbe_setzen"
End With
.ShowPopup
.Delete
End With
End Sub
' **************************************************************
' Modul: Modul1 Typ = Allgemeines Modul
' **************************************************************
Option Explicit
Option Private Module
Sub Hintergrundfarbe_setzen()
Selection.Interior.Color = Application.CommandBars.ActionControl.Parameter
End Sub
Gruß Uwe
Bin doch noch fündig geworden.
In meinem Archiv hatte ich noch etwas vom Farb-Guru Gandalf.
Hier mal die Liste aller Fundstellen (wenn ohne VB-Farbkonstante, muss man im Code die Farbnummer aus Spalte B nehmen):
| A | B | C |
1 | Farbkonstante
bzw. Farbe | Wert | FaceID |
2 | vbBlack | 0 | |
3 | vbRed | 255 | 6850 |
4 | vbGreen | 65.280 | 6852 |
5 | vbYellow | 65.535 | 6859 |
6 | vbBlue | 16.711.680 | 6851 |
7 | vbMagenta | 16.711.935 | 6857 |
8 | xlNone | -4.142 | 6849 |
9 | Zyan | 16.776.960 | 6855 |
10 | Grey | 14.277.081 | 6853 |
11 | Orange | 42.495 | 6854 |
12 | dark Green | 25.600 | 6858 |
Hallöchen,
ich habe hier auch mal eine Variante. Das Zellmenü wird unten um eine Farbauswahl erweitert. Die Auswahl kommt nur in der Datei. Siehe dazu auch meine Ribbon-Einführung im Workshop.
http://www.clever-excel-forum.de/Thread-...ons-Teil-1
Für alle die keine xlsm laden auch als xlsx mit dem Code in Tabelle1 und hier. Die CustomUI ist in beiden Varianten identisch und nicht vom Entfernen von Code beim Speichern als xlsx betroffen.
Code:
Public Sub Farbmacro(control As IRibbonControl)
Select Case control.ID
Case "Btn1Red": Selection.Interior.Color = vbRed
Case "Btn2Yel": Selection.Interior.Color = vbYellow
Case "Btn3Gre": Selection.Interior.Color = vbGreen
End Select
End Sub
Hallo Uwe,
deine aufgehübschte Version packe ich mir einfach in ein Modul, speicher die Datei ab und kann es jetzt wie genau nutzen?