Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
968to972
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
968to972
968to972
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Farbpalette

Farbpalette
20.04.2008 13:19:17
Tino
Hallo,
ich hätte da mal eine Frage.
Mit
Application.CommandBars("Font Color").Visible = True
kann ich die Farbpalette für die Schriftfarbe aufrufen.
Nun beim Klick wird die aktive Zelle mit der entsprechenden Schriftfarbe eingefärbt.
Gibt es nun die Möglichkeit, beim Klick nicht die Zelle zu färben, sondern den
Interior.ColorIndex an eine Variable zu übergeben? (möchte keine Zelle verwenden!!!)
Muss nicht diese Farbpalette sein, kann auch eine andere sein.
Habe nur diese gewählt, weil die mir optisch am meisten zusagt.
Besser wie die über Dialog aufgerufene.
Application.Dialogs(xlDialogPatterns).Show
Hat jemand eine Idee?
Gruß
Tino

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Farbpalette
20.04.2008 13:29:03
Heinz
Hi,
die controls von Office(nicht Excel) entziehen sich jedem Zugriff. In VBA gibt es dazu keinerlei Methoden.
mfg Heinz

AW: Farbpalette
20.04.2008 13:41:00
Tino
Hallo,
besteht den die Möglichkeit, sich eine solche selbst zu erstellen.
ZBsp:
um die FaceIds zu einem bestimmten Sympol zu finden habe ich folgenden Code.

Sub IconsundIDEinfügen()
Dim symb As CommandBar
Dim Icon As CommandBarControl
Dim i As Integer
On Error Resume Next
Set symb = Application.CommandBars.Add("Symbole", _
msoBarFloating)
For i = 1 To 50
Set Icon = symb.Controls.Add(msoControlButton)
Icon.FaceId = i
Icon.TooltipText = i
Next i
symb.Visible = True
End Sub


Könnte man diesen jetzt nicht so umstricken, dass dies auf die Farben funktioniert?
Gruß
Tino

Anzeige
ich lerne es nicht, Frage noch offen!
20.04.2008 14:12:00
Tino
Hallo,
die Frage war natürlich noch offen.
Gruß
Tino

AW: Farbpalette
20.04.2008 14:14:58
Heinz
Hi,
das scheitert erstmal daran, dass es keine Icon für alle Farben gibt. Gut, die könntest du
noch selber basteln, aber dann wirds schwierig, deine Commandbar immer anzupassen,
fall der User auf die Idee kommt, die Farbpalette zu verändern.
Ich hab hier im Forum mal ein tolle Lösung mit Userform gesehen, vielleicht ist das für
dich eine Überlegung wert.
mfg Heinz

AW: Farbpalette
20.04.2008 14:24:46
Daniel
Hi
wenn Excel unter EXTRAS-ZUSÄTZLICHE STEUERELEMENTE nichts passendes zu verfügung stellt, wirst du dir wohl ne eigene Userform schreiben müssen:
https://www.herber.de/bbs/user/51721.xls
Gruß, Daniel

Anzeige
AW: Farbpalette
20.04.2008 14:54:00
Heinz
Hi,
ganz nett, aber, die Farbreihenfolge entspricht nicht der in den Excel-Farbdialogen.
mfg Heinz

AW: Farbpalette
20.04.2008 14:59:31
Daniel
Hi
ich weiß, aber sie entspricht der Reihenfolge der Index-Nummern.
aber es kann ja jeder selbst die Steuerelementbuttons in die vom ihm gewünschte Reihenfolge bringen.
ein bisschen Arbeit muss ich ja auch Tino überlassen ;-).
wenn du allerdings weißt, in welcher Reihenfolge Excel seine "Farbbuttons" anordnet, dann könnte man u.U das Initialisierungsmakro so schreiben, daß die Buttons and die richtige Postion geschrieben werden

AW: Farbpalette
20.04.2008 15:01:41
Tino
Hallo Daniel,
Danke für deine Userform, brauche diese somit schonmal nicht zu bauen.
Wahrscheinlich muss ich wohl auch die Userform nehmen.
Zum Hintergrund, warum ich dass vermeiden wollte:
Ich baue mir gerate ein Add-in zusammen, dass mir aus einer beliebigen
Exceldatei einen HTML- Code erstellt, den ich nach Auswahl in ein Outlook Mail oder
eine Webseite abspeichern kann, mit der Auswahl ob nur die Selektion oder die Tabelle oder die gesamte Mappe erstellt werden soll.
Nun bin ich an der Feinarbeit, ich habe es mir so vorgestellt.
Wird zum Beispiel in der Markierung kein Rahmen gefunden, geht eine Abfrage auf
ob zur optischen Aufbesserung in der HTML Version ein neuer Rahmen gezogen werden soll.
Das Funktioniert soweit alles schon, nur hätte ich noch gern die Option die Farbe für den Rahmen auswählen zu können.
Das mit der Userform ist schon super, aber ich wollte dass Add-in vom Speicherbedarf
so gering wie möglich halten, daher wären die Excel eigenen Paletten schon besser gewesen.
Aber vielleicht gibt es ja noch andere Vorschläge.
Gruß
Tino

Anzeige
Choosecolor
20.04.2008 21:17:00
ransi
Hallo Tino
Google mal nach Choosecolor.
Da kann man das sowas nutzen:
(Ist immer noch einfacher als ne Userform zu basteln)
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Declare Function ChooseColor Lib "comdlg32.dll" Alias "ChooseColorA" (lpcc As CHOOSECOLOR_TYPE) As Long
Type CHOOSECOLOR_TYPE
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    rgbResult As Long
    lpCustColors As Long
    Flags As Long
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
End Type

Enum CC_ZusatzEinstellungen
    CC_AlleFarben = &H100
    CC_AlleFarbenAnzeigen = &H2
    CC_KeinErweitern = &H1
    CC_StandardFarbe = &H1
    CC_HilfeAnzeigen = &H1
    CC_NurGrundfarben = &H80
End Enum

Type FarbAuswahlInfo
    VordefinierteFarben(15) As Long
    Vorauswahl As Long
    ZusatzEinstellungen As CC_ZusatzEinstellungen
End Type

Function FarbAuswahl(Info As FarbAuswahlInfo) As Long
Dim ccColor As CHOOSECOLOR_TYPE
Dim Farben(15) As Long
With ccColor
    .lStructSize = Len(ccColor)
    .hwndOwner = Application.Hwnd
    .hInstance = Application.hInstance
    .rgbResult = Info.Vorauswahl
    .lpCustColors = VarPtr(Info.VordefinierteFarben(0))
    .Flags = Info.ZusatzEinstellungen
    .lpfnHook = 0&
End With
ChooseColor ccColor
FarbAuswahl = ccColor.rgbResult
End Function

Sub AUFRUF()
Dim Infos As FarbAuswahlInfo
Dim variable As Long
With Infos
    .VordefinierteFarben(0) = RGB(255, 0, 0)
    .VordefinierteFarben(1) = RGB(0, 255, 0)
    .VordefinierteFarben(2) = RGB(0, 0, 255)
    .VordefinierteFarben(3) = RGB(255, 255, 0)
    .VordefinierteFarben(4) = RGB(0, 255, 255)
    .VordefinierteFarben(5) = RGB(255, 0, 255)
    .VordefinierteFarben(6) = RGB(255, 255, 255)
    .VordefinierteFarben(7) = RGB(128, 0, 0)
    .VordefinierteFarben(8) = RGB(0, 128, 0)
    .VordefinierteFarben(9) = RGB(0, 0, 128)
    .VordefinierteFarben(10) = RGB(128, 128, 0)
    .VordefinierteFarben(11) = RGB(0, 128, 128)
    .VordefinierteFarben(12) = RGB(128, 0, 128)
    .VordefinierteFarben(13) = RGB(128, 128, 128)
    .VordefinierteFarben(14) = RGB(255, 128, 0)
    .VordefinierteFarben(15) = RGB(0, 128, 255)
    .Vorauswahl = RGB(255, 0, 0)
    .ZusatzEinstellungen = CC_AlleFarben Or CC_StandardFarbe Or CC_HilfeAnzeigen Or CC_KeinErweitern
End With
variable = FarbAuswahl(Infos)
MsgBox variable
Range("a1").Interior.Color = variable
End Sub

ransi

Anzeige
AW: Farbpalette
20.04.2008 22:53:08
Renee
Hi Tino,
Dieser Code läuft über die internen ColorPicker. Damit lässt sich eine Zelle in mehr Farben färben als, in der ExcelPalette zur Verfügung stehen. Die Funktion gibt den Farbcode zurück (nicht zu Verwechseln mit dem ColorIndex, darum Interior.Color und nicht Interior.ColorIndex).

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
Sub TEST()
Dim x As Variant
ActiveCell.Interior.Color = ColorFromPallet(ActiveCell.Interior.Color)
End Sub


GreetZ Renée

Anzeige
AW: Farbpalette
21.04.2008 00:11:06
Tino
Hallo,
danke erst mal, ich werde die Beispiele morgen mal testen.
Ihr seit wie immer super.
Gruß
Tino

AW: Farbpalette
21.04.2008 21:51:53
Daniel
Hi
das stimmt so nicht ganz.
ich kann zwar viele Farben auswählen, bei mir (Excel 2002) wird trotzdem immer nur eine der 56 Farben aus der Vorlage zugewiesen (zwar die nächst-passende, aber eben keine beliebige)
das kannst du am einfachsten ausprobieren, wenn du mal die einzelen Graustufen durchtestest.
die ersten beiden sind weiss, die nächsten 3 bekommen den gleichen Farbindex (15).
wenn du einer Zelle eine beliebige Farbe zuweisen willst, muss man erst eine der 56 Vorgabewerte auf diese Farbe ändern und dann den Vorgabeindex der Zelle zuweisen.
Wie gesagt, gilt nur bis 2002, ob 2003 und 2007 schon mehr Farben können, weiß ich nicht.
Gruß, Daniel

Anzeige
AW: Farbpalette
21.04.2008 22:53:18
Tino
Hallo,
also ich habe mich jetzt für diese Version entschieden.
Diese ist optisch sehr ansprechend,
ob jetzt die Farbe nicht 100% der Auswahl entspricht,
spielt für meine Bedürfnisse nur eine Nebenrolle.
Mal schauen vielleicht kann ich diesen Color Wert, direkt in einen HTML Hex Wert umstricken.
Habe da schon etwas, siehe unten.
Danke super Sache.
Gruß
Tino

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 Function HexFarbe(a As Long)
Dim b, g, r As String
'a = Interior.Color
b = a \ 65536
g = (a - b * 65536) \ 256
r = a - b * 65536 - g * 256
r = Hex(r)
g = Hex(g)
b = Hex(b)
If Len(r) 


Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige