Festlegen von Farben in Hex und Dezimal anders zu Verhalten
Ich versuche gesetzt um eine orangish Farbe in der folgenden Art und Weise:
WorkSheet.Range("A1:A5").Interior.color = 49407
und
WorkSheet.Range("A1:A5").Interior.color = &HC0FF 'Hex value of 49407
Nicht diese beiden sein soll, genau entspricht?
Die Farben eingestellt wird, sind unterschiedlich.
InformationsquelleAutor Anirudh Ramanathan | 2012-09-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, diese Werte sind nicht äquivalent:
&HC0FF
ist -16129, in der Erwägung, dass&HC0FF&
ist 49407.VBA, eine ziemlich alte Sprache verwendet 16-bit-Integer standardmäßig. In diesem Tag und Alter, Sie wollen ziemlich viel longs immer anstatt von ints, aber Sie haben zu Fragen, VBA für Sie.
&HC0FF
ist ein Konstrukt, das definiert eine 16-bit-Konstante hex. Da das Vorzeichen-bit in diesem Wert eingestellt werden (negativ), wenn Sie interpretiert wird als 16-bit-Wert, also die Umstellung auf -16129. Wir sollten in Betracht ziehen, dass das nervt, aber es ist kein bug! Wenn Sie -16129 (als eine Ganzzahl), im 32-bit-form, 1 weitergegeben werden, bis Sie den gesamten oberen 16 bits, und dass die Ergebnisse in den blau-Wert von 255.Wirklich das, was Sie hier wollte, ist ein 32-bit-hex-Konstante:
&HC0FF&
.Die extra
&
am Ende sagt VBA, dass dies ist eine lange Konstante statt einer int. Interpretiert in 32-bit ist dies ein positiver Wert, so gibt die Dezimalzahl, die Sie suchen.In kurze Fragen für lange hex-Konstanten mit dem hinteren
&
.Nebenbei, diese Neigung von VBA in Richtung 16 bit kann auch beißen uns bei der Verwendung von decimal-Konstanten, wie in einem Ausdruck 16000 * 16000, die überlauf der 16 bit-Arithmetik. Also, manchmal braucht man zur Nutzung der nachfolgende
&
auf decimal-Konstanten zu (oder weisen Sie zu einem langen ersten).Erstaunliche Antwort. Ich sah die negativen Unterschied, aber hatte keine Ahnung, warum es passiert war, bis ich deine Antwort gelesen. Sehr informativ!
InformationsquelleAutor Erik Eidt
Ich glaube, die Antworten von Gimp und Johannes, beide verpassen die entscheidende Frage.
Eine Farbe auf einem computer-Bildschirm ist definiert durch die Angabe, wie viel rot, blau und grün, die Sie benötigen. Für jede der drei Farben geben Sie eine Zahl zwischen 0 und 255. Diese drei zahlen sind in der Regel angegeben, als eine einzelne Zahl, durch die Verkettung der drei separate zahlen. Mit Html legen Sie eine Farbe als #RRGGBB wobei RR, GG und BB sind hexadezimale zahlen, oder Sie können Sie ersetzen RRBBGG durch die entsprechende Dezimalzahl. Mit Excel die Reihenfolge Umgekehrt, so &HBBGGRR oder die entsprechende Dezimalzahl.
49407 ist die Dezimalzahl 00C0FF, die für Excel, Blau = 0, Grün = 192 und Rot = 255.
Aber &HC0FF oder &H00C0FF ist -16129 oder Blau = 255, Grün = 192 und Rot = 255. Dies scheint ein Fehler in der &H-Konvertierung. Ich kann nicht finden sowieso immer C0FF umgewandelt 49407.
Wenn Sie darauf bestehen, mit den &H-Konvertierung, die beste, die ich anbieten kann ist:
Dies ist Blau = 1, Grün = 192 und Rot = 255 und ich kann nicht sagen, der Unterschied von Blau = 0, Grün = 192 und Rot = 255.
Aber ich würde empfehlen:
weil die RGB-Funktion gibt immer eine positive Zahl, und Sie müssen nicht sorgen zu machen über Excel umgekehrter Reihenfolge.
ja, Sie können nicht überspringen Sie die führende 0...... die Antwort über die int-Größe ist sehr cool, aber das ist sehr viel, lautet die praktische Antwort
InformationsquelleAutor Tony Dallimore
Diese konvertieren des hex-format Farben, die Sie haben, um die RGB-Lange, die Office-Anwendungen für RGB-Farben:
InformationsquelleAutor Steve Rindsberg
Einen Colorcode ist in der Regel aus drei Werte, ROT, GRÜN, BLAU. Ihre Hexcode fehlt eines der drei, und excel ist autofilling es mit FF. Damit Ihre Farbe C0FF verwandelt werden FFC0FF.
Hier ist ein Exampleprogram, so können Sie es in Aktion, machen Sie ein neues Blatt und führen Sie es aus.
EDIT: Hinzugefügt ein drittes Beispiel, um zu veranschaulichen, wechseln die Farben wie vorgeschlagen in einer anderen Antwort.
00C0FF
direkt?InformationsquelleAutor Johannes