Ich arbeite an einigen Projekten für die Arbeit mit Excel und VBA, daher habe ich keine andere Wahl, als den Microsoft Visual Basic-Editor zu verwenden. Normalerweise würde es mir nichts ausmachen, aber ich kann nicht herausfinden, wie ich eine benutzerdefinierte Farbe für den Editor festlegen kann (ich kann nur aus der Standardpalette auswählen).
Um die aktuelle Farbe zu ändern, gehe ich zu Tools -> Options -> Editor Format
... Ihre Auswahl beschränkt sich jedoch nur auf die Standardfarben (und die Standardfarben) 16 - und wenn ich Basic sage, meine ich Basic , wie Pink, Blau, Schwarz, Weiß usw. ..
Weiß jemand, wie man entweder eine benutzerdefinierte Farbe angibt oder zumindest einige der Farben ändert, die in der Standardpalette angezeigt werden?
quelle
Antworten:
VBA liest die Einstellungen für die Farben aus diesen Registrierungsschlüsseln:
Jeder dieser Schlüssel enthält eine Liste von Werten (durch Leerzeichen getrennt) für jeden Eintrag unter Extras -> Optionen -> Editorformat. Beispielsweise ist der erste Wert in CodeBackColors die Hintergrundfarbe und der erste Wert in CodeForeColors die Vordergrundfarbe für normalen Text. Die Werte sind die interne ID für die Farbe, 0 bedeutet AUTO-Färbung, 11 zeigt Cyan, 5 Rot usw.
Probieren Sie es aus: Schließen Sie Excel, ändern Sie den ersten Wert von CodeBackColors in 5 und starten Sie Excel neu. Der Hintergrund des Code-Editors ist jetzt rot.
Das Problem ist, dass der VBA-Editor nur diese internen Werte unterstützt und die höchste Zahl, die er versteht, 16 ist. Alle anderen Werte werden nicht akzeptiert und werden standardmäßig auf AUTO zurückgesetzt.
Ich habe verschiedene Eingabemöglichkeiten für unterschiedliche Werte ausprobiert (z. B. 128255128, 16777215, #aaffee, 255 oder "170,255,238"), und keine davon hat funktioniert.
Aus diesem Grund denke ich, dass es technisch nicht möglich ist, andere Farben zuzuweisen.
quelle
Ich habe eine Anwendung basierend auf den Informationen hier erstellt: https://github.com/dimitropoulos/VBECustomColors
Es sichert im Grunde genommen die DLL-Datei VBE6 / VBE7 und ermöglicht die Verwendung benutzerdefinierter Farben, ohne einen Hex-Editor verwenden zu müssen.
Sie können es hier herunterladen: https://github.com/gallaux/VBEThemeColorEditor
Genießen
Bearbeiten: Quellcode ist jetzt verfügbar!
quelle
HKEY_CURRENT_USER\Software\Microsoft\VBA\7.1\Common
. [2] WechselCodeBackColors
zu:2 7 1 13 15 2 2 2 11 9 0 0 0 0 0 0
. [3] WechselCodeForeColors
zu:13 5 12 1 6 15 8 5 1 1 0 0 0 0 0 0
. [4] WechselFontFace
zu:Consolas
.TeX HeX ist genau richtig. Es ist jedoch möglich, die 16 integrierten Farben mit Ihren eigenen zu ändern. Es erfordert nur ein bisschen Hex-Bearbeitung. Hier ist eine Schritt-für-Schritt-Anleitung. (Hinweis: Dies ist für VB6 SP6, Dateiversion 6.0.97.82).
Sichern Sie Ihre VB6.EXE-Datei in Ihrem VB98-Programmordner. (Optional, aber empfohlen).
Starten Sie Ihren bevorzugten Hex-Editor (rufen Sie HxD an) und öffnen Sie VB6.EXE.
Zur Adresse 0xE22F4 springen. Dies ist der Beginn der Farbtabelle.
Sie sollten vier Nullen sehen. Dies stellt die Farbe Schwarz im RRGGBBAA-Format dar (Alpha wird nicht unterstützt, es ist also wirklich nur das RRGGBB00-Format). Die nächsten vier Bytes geben die nächste Farbe usw. an, bis Sie zu FFFFFF00 (weiß) gelangen, das mit dem Offset 0xE2333 endet.
Bearbeiten Sie einen dieser 4-Byte-Werte nach Ihren Wünschen. Verwenden Sie einfach die entsprechenden Hex-Werte im RGB-Format, gefolgt von einem Null-Byte. Zum Beispiel wäre RGB (64, 128, 192) 40 80 C0 00.
Speichern Sie Ihre Änderungen an der EXE und starten Sie VB6. Sie sollten Ihre neuen Farben in den Steckplätzen sehen, die zuvor von den integrierten VB-Farben belegt waren.
quelle
Wie bereits erwähnt, funktioniert Bonds Lösung (hexadezimales Bearbeiten der Farbtabelle in VB6.exe), Sie müssen jedoch bei jedem Start von VB6 die Farben im Dialogfeld "Optionen" neu einstellen. Ich habe ein AutoIt- Skript erstellt, das die gesamte Arbeit für Sie erledigt. Bearbeiten Sie es einfach nach Bedarf, wenn alle Aufrufe von SetSyntaxColoring () erfolgen:
Ich behalte es einfach auf meinem Desktop und jetzt, wenn ich vb6 öffnen muss, doppelklicke ich darauf und die Syntaxfärbung ist einfach unter meiner Kontrolle.
Edit 1: Das Skript wurde ein wenig optimiert, um die Ausführung zu beschleunigen. Ich denke darüber nach, ein Programm zusammenzustellen, das VB6.EXE automatisch bearbeitet, um die Farbauswahl zu vereinfachen. Ich frage mich, ob es eine Möglichkeit gibt, das AutoIt-Skript durch Erstellen eines Plugins für VS zu umgehen.
Bearbeiten 2: Erstellt ein Dienstprogramm, mit dem Sie die Farben in der Exe bearbeiten können, ohne einen Hex-Editor verwenden zu müssen: VbClassicColorEditor . Dieser Link führt zum öffentlichen Repository von bitbucket.
quelle
Ich wollte nur eine Zusammenfassung der vorherigen Antworten veröffentlichen, da nicht ganz klar ist, was getan werden muss, um die Farben im Excel VBA-Editor zu ändern
Im folgenden Beispiel füge ich das Farbschema für Solarized hinzu und gehe von der Verwendung von Office 2010 aus
Schritt 0: Erstellen Sie eine Sicherungskopie der VBE7.dll, bevor Sie diese ändern - Sie wurden gewarnt !!!
Schritt 1: Öffnen Sie in einem Hex-Editor die Datei VBE7.dll, die sich unter befindet.
"C:\Program Files\Common Files\microsoft shared\VBA\VBA7\VBE7.DLL"
für 64bitoder
"C:\Program Files( x86)\Common Files\microsoft shared\VBA\VBA7\VBE7.DLL"
für 32bitSchritt 2: Finden Sie das 1. Vorkommen von
und ersetzen mit
Schritt 3: Finden Sie das 2. Vorkommen davon (stellen Sie sicher, dass Sie oben in der Datei suchen)
und ersetzen mit
Schritt 4: Speichern Sie die DLL-Datei, öffnen Sie Excel> VBA-Editor> Extras> Optionen> Editor-Format und legen Sie die Codefarben fest.
Das Ändern beider Zeichenfolgen ist erforderlich, damit die Farben beim Herunterfahren korrekt gespeichert werden und der Farbeditor ohne Absturz von Excel geöffnet werden kann.
Vielen Dank an alle vorherigen Antwortenden, die sich die Zeit genommen haben, dies herauszufinden!
quelle
Ich habe ein Programm erstellt, das all dies automatisiert, viel zu lange damit verbracht und Spaß daran gehabt, einen Farbwähler zu erstellen. Made in VB6 weil warum nicht. Kompiliertes Programm und Quellcode hier verfügbar . Getestet nur auf meinen Versionen der DLLs und VB6, machen Sie bitte Backups, bevor Sie etwas ändern - die Speicherorte sind im Code festgelegt.
Dies ist eine sehr alte Frage, aber ich möchte der Vollständigkeit halber abwägen
Für VS2012-Farben in VBA- oder VB6-IDE: Öffnen Sie VBE6.DLL / VBE7.DLL oder VBA6.DLL in
mit deinem hex editor
Ersetzen Sie das erste Vorkommen von
Mit
Kehren Sie dann nach oben zurück und ersetzen Sie das zweite Vorkommen von
mit
Ändern Sie dann Folgendes in der Registrierung
Wenn Sie für VBA modifizieren, sind Sie fertig. Öffnen Sie für VB6 jetzt 'VB6.exe' in Ihrem Hex-Editor und ändern Sie das erste Vorkommen von
mit
Dadurch wird die in der Oberfläche von VB6 angezeigte Farbe korrigiert, sodass Sie weitere Änderungen an den Farben vornehmen können.
Vielen Dank an alle anderen Antworten. Ich habe mir das nicht ausgedacht, sondern nur gedacht, dass es nützlich ist, alle erforderlichen Informationen in einem einzigen Beitrag zu haben. Mit dieser Methode sollten Sie in der Lage sein, aus den verfügbaren Farben frei zu wählen.
Ich habe auch die Farben einiger anderer Antworten neu angeordnet, also ändere vbRed, vbBlue, vbWhite usw. nicht, damit du immer noch das gewünschte Ergebnis im Code erhältst. Da dies nicht vollständig getestet wurde, ändern Sie Programme immer auf eigenes Risiko.
Es wäre schön, ein kleines Programm zusammenzustellen, das dies für Sie erledigt (wie es Gallaux getan hat). Ich hatte Probleme beim Schreiben in die Registrierung und in die VB6-IDE mit diesem Programm, und eine Art Vorschaufenster wäre schön.
Einschränkungen, die ich gefunden habe: Dies ändert nicht die Farbe der Anzeigesymbole. Sie müssen dies selbst tun.
quelle
Ausgehend von Dnissleys Antwort (wo er fragt, ob jemand ein Add-In erstellen könnte) habe ich ein Add-In für VB6 erstellt. Es ist ein bisschen grob (und ich erkläre gleich, warum), aber es macht den Job.
Ich habe in VB6 ein neues Add-In-Projekt erstellt, das mir das Standardformular "frmAddin" (das ich nicht verwende) und den Designer "Connect" gab. Ich habe selbst eine Farbklasse hinzugefügt, die Folgendes enthält:
Und dann habe ich den Code im "Connect" -Designer folgendermaßen geändert:
Mit diesem Code kann die Anwendung die gewünschten Farben aus einer Datei lesen, die sich im selben Verzeichnis befindet wie die DLL (VB6CodeColours.dat). Diese Datei enthält Folgendes (und hängt davon ab, welche Farben Sie in der Datei VB6.EXE ersetzen), sodass ein direktes Kopieren und Einfügen wahrscheinlich nicht funktioniert.
Sieht Kauderwelsch aus, aber ich werde es erklären. Es hat das Format "Codefarbe", "Vordergrund", "Hintergrund", Indikator ", so dass in der oberen Reihe der" Normale Text "auf das 14. Element in der Kombination für den Vordergrund, das 12. für den Hintergrund und das 1. für den Indikator gesetzt wird .
Warum habe ich gesagt, es ist eine ziemlich grobe Lösung: * Es verwendet SendKeys. Keine weiteren Erklärungen erforderlich, da bin ich mir sicher :) * Der Benutzer muss auf die Menü- / Symbolleistenoption klicken, damit sie wirksam wird. * Der Code ist (meiner Meinung nach) nicht am besten strukturiert, basierte jedoch auf der Zeit, die ich ihm zu diesem Zeitpunkt widmen konnte. Ich versuche, es in Zukunft zu verbessern, aber es funktioniert im aktuellen Zustand einwandfrei (also werde ich es wahrscheinlich lassen!)
Vielleicht kann jemand auf dieser Grundlage weiter darauf eingehen.
quelle
Hier ist der Trick, wie Sie Ihre Farbauswahl dauerhaft beibehalten können. Ein bisschen mehr Hex-Bearbeitung. Wenn Sie die von Bond vorgeschlagene Ersetzung vorgenommen haben, sollten Sie Folgendes zur Hand haben: RGBA-Werte für die Basisfarben (klassisch) 16, die von 0 bis 15 indiziert sind, und RGBA-Werte für Ihre benutzerdefinierten Farben, die auf die gleiche Weise indiziert sind. Durchsuchen Sie nun VBEx.DLL nach einer Bytefolge, die aus "klassischen" RGBA-Werten aufgebaut ist und in der folgenden Reihenfolge von Indizes geordnet ist: 15, 7, 8, 0, 12, 4, 14, 6, 10, 2, 11, 3, 9, 1 , 13, 5 (dh weiß, grau, dunkelgrau, schwarz, rot, dunkelrot usw.). Das Muster ist nicht zufällig, sondern von Werten abgeleitet, die in der Registrierung gespeichert sind (siehe Beitrag von Tex Hex). Die Hex-Zeichenfolge für die Suche sollte wie folgt aussehen: 'FFFFFF00C0C0C0008080800000000000FF000000 ...' usw. Insgesamt 64 Byte. Ersetzen Sie die gefundene Bytesequenz durch RGBA-Werte von "benutzerdefinierten" Farben, die in derselben Reihenfolge angeordnet sind, z. B. 15, 7, 8 usw. Jetzt werden alle Farben, die Sie in der VS-Benutzeroberfläche auswählen, in der Registrierung gespeichert und nach dem Neustart der Anwendung angewendet. Na ja, alle außer "Indikator" -Farben. Diese werden immer auf die Standardeinstellungen zurückgesetzt. Anmerkungen:
Vielen Dank an Tex Hex und Bond für die ersten Recherchen.
UPD: Getestet mit MSO2007 (VBE6.DLL) und MSO2013 (VBE7.DLL). Arbeit wie ein Zauber.
quelle
Die Lösung von Bond (Bearbeiten der Farbtabelle in VB6.exe) eignet sich perfekt zum Ändern der Farbtabelle in der VB6-IDE. Ich stellte jedoch fest, dass VB6 die geänderte Farbe nicht ordnungsgemäß in der Registrierung speichern kann, wenn eine geänderte Farbe ausgewählt und VB6 heruntergefahren wird.
Normalerweise schreibt VB6 für jedes Textelement, dessen Farbe geändert werden kann, einen Index in die Farbtabelle mit 16 Werten.
Die Farbindizes werden hier in die Registrierung geschrieben:
Der CodeForeColors-Wert sieht beispielsweise folgendermaßen aus:
Werte von 1 bis 16 stellen eine Farbe in der Farbtabelle dar und 0 bedeutet 'Auto'.
Wenn jedoch eine geänderte Farbe ausgewählt wird, schreibt VB6 eine Zahl außerhalb des Indexbereichs in die Registrierung und der CodeForeColors-Wert sieht ungefähr so aus:
Beim nächsten Start von VB6 kann nicht die richtige Farbe für das Element festgelegt werden, für das die geänderte Farbe festgelegt wurde.
Ich versuche immer noch, eine Lösung zu finden, wollte aber posten, was ich bisher gefunden habe.
quelle