Je travaille sur quelques projets utilisant Excel et VBA. Je n'ai donc pas d'autre choix que d'utiliser l'éditeur Microsoft Visual Basic. Cela ne me dérangerait normalement pas, mais je ne vois pas comment définir une couleur personnalisée pour l'éditeur (je ne peux choisir que dans la palette par défaut).
Pour changer la couleur actuellement, je vais à Tools -> Options -> Editor Format
... Cependant, vos choix sont limités aux 16 couleurs par défaut (et de base) - et quand je dis basique, je veux dire basique , comme le rose, le bleu, le noir, le blanc, etc ...
Quelqu'un sait-il comment spécifier une couleur personnalisée ou, à tout le moins, modifier certaines des couleurs affichées dans la palette par défaut?
VBA lit les paramètres des couleurs à partir de ces clés de registre:
HKEY_CURRENT_USER\Logiciel\Microsoft\VBA\6.0\Common\CodeForeColors HKEY_CURRENT_USER\Logiciel\Microsoft\VBA\6.0\Common\CodeBackColors
Chacune de ces clés contient une liste de valeurs (séparées par un espace) pour chaque entrée dans Outils -> Options -> Format de l'éditeur. Par exemple, la première valeur à l'intérieur CodeBackColors est la couleur d'arrière-plan et la première valeur à l'intérieur CodeForeColors est la couleur de premier plan du texte normal. Les valeurs sont l'identifiant interne de la couleur, 0 signifie la coloration AUTO, 11 le cyan, 5 le rouge, etc.
Pour essayer: Fermez Excel, remplacez la première valeur de CodeBackColors par 5 et redémarrez Excel. Le fond de l'éditeur de code sera maintenant rouge.
Le problème est que l'éditeur VBA ne prend en charge que ces valeurs internes et que le nombre le plus élevé qu'il comprend est 16. Aucune autre valeur ne sera acceptée et la valeur par défaut sera de nouveau définie sur AUTO.
J'ai essayé plusieurs options pour entrer des valeurs différentes (par exemple, 128255128, 16777215, #aaffee, 255 ou "170,255,238") et aucune d'entre elles n'a fonctionné.
Par conséquent, je pense qu'il n'est techniquement pas possible d'attribuer d'autres couleurs.
J'ai créé une application basée sur les informations trouvées ici: https://github.com/dimitropoulos/VBECustomColors
Fondamentalement, il sauvegarde le fichier .dll VBE6/VBE7 et permet l’utilisation de couleurs personnalisées sans avoir à utiliser un éditeur hexadécimal.
Vous pouvez le télécharger ici: https://github.com/gallaux/VBEThemeColorEditor
Prendre plaisir
Edit: Le code source est maintenant disponible!
TeX HeX est sur place. Cependant, il est IS possible de modifier les 16 couleurs intégrées avec les vôtres. Cela nécessite juste un peu d'édition hexadécimale. Voici un guide étape par étape. (Remarque: il s’agit de VB6 SP6, version 6.0.97.82 du fichier).
Sauvegardez votre fichier VB6.EXE dans votre dossier de programme VB98. (Facultatif, mais recommandé).
Lancez votre éditeur hexadécimal préféré (criez HxD) et ouvrez VB6.EXE.
Passez à l'adresse 0xE22F4. C'est le début de la table des couleurs.
Vous devriez voir quatre zéros. Cela représente la couleur noire au format RRGGBBAA (l'alpha n'est pas pris en charge, il s'agit donc uniquement du format RRGGBB00). Les quatre octets suivants spécifient la couleur suivante et ainsi de suite jusqu'à atteindre FFFFFF00 (blanc) se terminant à l'offset 0xE2333.
Modifiez l'une de ces valeurs à quatre octets selon vos préférences. Utilisez simplement les valeurs hexadécimales appropriées au format RVB, suivies d'un octet nul. Par exemple, RVB (64, 128, 192) correspond à 40 80 C0 00.
Enregistrez vos modifications dans le fichier EXE et démarrez VB6. Vous devriez voir vos nouvelles couleurs dans les emplacements précédemment occupés par les couleurs intégrées VB.
Comme beaucoup l'ont noté, la solution de Bond (édition hexagonale de la table de couleurs dans VB6.exe) fonctionnera, mais vous devrez redéfinir vos couleurs dans la boîte de dialogue des options à chaque démarrage de VB6. J'ai créé un script AutoIt qui effectuera tout le travail à votre place. Il vous suffit de le modifier si nécessaire, là où tous les appels à SetSyntaxColoring () se font. fabriqué:
Opt("WinTitleMatchMode", 2)
Opt("MouseClickDelay", 1)
Opt("MouseClickDownDelay", 1)
Opt("MouseClickDragDelay", 1)
Opt("SendKeyDelay", 1)
Opt("SendKeyDownDelay", 1)
Const $NORMALTEXT = 0
Const $SELECTIONTEXT = 1
Const $SYNTAXERRORTEXT = 2
Const $EXECUTIONPOINTTEXT = 3
Const $BREAKPOINTTEXT = 4
Const $COMMENTTEXT = 5
Const $KEYWORDTEXT = 6
Const $IDENTIFIERTEXT = 7
Const $BOOKMARKTEXT = 8
Const $CALLRETURNTEXT = 9
Const $AUTO = 0
Const $BLACK = 1
Const $DARKBLUE = 2
Const $DARKGREEN = 3
Const $DARKRED = 4
Const $DARKBABYBLUE = 5
Const $DARKPINK = 6
Const $DARKYELLOW = 7
Const $LIGHTGRAY = 8
Const $DARKGRAY = 9
Const $BLUE = 10
Const $GREEN = 11
Const $BABYBLUE = 12
Const $RED = 13
Const $PINK = 14
Const $YELLOW = 15
Const $WHITE = 16
If WinExists( "Microsoft Visual Basic" ) Then
WinActivate("Microsoft Visual Basic") ; activates the visual basic window
Send("!+to") ; opens the options menu
Sleep(10)
WinMove("Options", "", 0, 0) ; moves the options menu to the upper left corner of the screen
MouseClick("primary", 100, 50, 1, 0) ; clicks the editor tab
SetSyntaxColoring($NORMALTEXT, $WHITE, $BLACK)
SetSyntaxColoring($SELECTIONTEXT, $AUTO, $AUTO)
SetSyntaxColoring($SYNTAXERRORTEXT, $BLACK, $YELLOW)
SetSyntaxColoring($EXECUTIONPOINTTEXT, $AUTO, $YELLOW)
SetSyntaxColoring($BREAKPOINTTEXT, $WHITE, $DARKRED)
SetSyntaxColoring($COMMENTTEXT, $DARKGREEN, $BLACK)
SetSyntaxColoring($KEYWORDTEXT, $GREEN, $BLACK)
SetSyntaxColoring($IDENTIFIERTEXT, $WHITE, $BLACK)
SetSyntaxColoring($BOOKMARKTEXT, $WHITE, $BLACK)
SetSyntaxColoring($CALLRETURNTEXT, $WHITE, $GREEN)
MouseClick("primary", 210, 340, 1, 0) ; hit the ok button to apply the changes
EndIf
Func SetSyntaxColoring($syntax, $forecolor, $backcolor)
SelectSyntax($syntax)
SelectForecolor($forecolor)
SelectBackcolor($backcolor)
EndFunc
Func SelectSyntax($syntax)
ResetSyntaxList()
RptSend("{DOWN}", $syntax)
EndFunc
Func SelectForecolor($color)
ResetForecolorCbo()
RptSend("{DOWN}", $color)
EndFunc
Func SelectBackcolor($color)
ResetBackcolorCbo()
RptSend("{DOWN}", $color)
EndFunc
Func ResetSyntaxList()
MouseClick("primary", 50, 95, 1, 0)
RptSend("{UP}", 9)
EndFunc
Func ResetForecolorCbo()
MouseClick("primary", 50, 235, 1, 0)
MouseClick("primary", 50, 235, 1, 0)
RptSend("{UP}", 16)
EndFunc
Func ResetBackcolorCbo()
MouseClick("primary", 125, 235, 1, 0)
MouseClick("primary", 125, 235, 1, 0)
RptSend("{UP}", 16)
EndFunc
Func RptSend($text, $rpt)
For $i = 1 To $rpt
Send($text)
Next
EndFunc
Je le garde juste sur mon bureau et maintenant, chaque fois que je dois ouvrir vb6, je double-clique dessus et tout comme cette coloration de syntaxe est sous mon contrôle.
Edit 1: Optimisé un peu le script pour le rendre plus rapide. Je songe à créer un programme qui modifiera automatiquement VB6.EXE afin de faciliter la sélection des couleurs. Je me demande s’il est possible de laisser tomber le script AutoIt en créant un plugin pour VS?
Edit 2: Créé un utilitaire permettant d’éditer les couleurs dans le fichier exe sans avoir à utiliser un éditeur hexadécimal: VbClassicColorEditor . Ce lien va au référentiel public sur bitbucket.
Je voulais juste poster un résumé des réponses précédentes car il n'est pas tout à fait clair ce qui doit être fait pour changer les couleurs dans l'éditeur VBA Excel
Dans l'exemple ci-dessous, j'ajoute le jeu de couleurs pour Solarized et je suppose l'utilisation d'Office 2010.
Étape 0: Faites une sauvegarde du fichier VBE7.dll avant de le modifier - vous avez été averti !!!
Étape 1: Dans un éditeur Hex, ouvrez le fichier VBE7.dll situé @
"C:\Program Files\Common Files\Microsoft shared\VBA\VBA7\VBE7.DLL"
pour 64bit
ou
"C:\Program Files( x86)\Common Files\Microsoft shared\VBA\VBA7\VBE7.DLL"
pour 32bit
Étape 2: Trouvez la 1ère occurrence de
ff ff ff 00 c0 c0 c0 00 80 80 80 00 00 00 00 00
ff 00 00 00 80 00 00 00 ff ff 00 00 80 80 00 00
00 ff 00 00 00 80 00 00 00 ff ff 00 00 80 80 00
00 00 ff 00 00 00 80 00 ff 00 ff 00 80 00 80 00`
et remplacer par
00 2b 36 00 07 36 42 00 58 6e 75 00 65 7b 83 00
83 94 96 00 93 a1 a1 00 ee e8 d5 00 fd f6 e3 00
b5 89 00 00 cb 4b 16 00 dc 32 2f 00 d3 36 82 00
6c 71 c4 00 26 8b d2 00 2a a1 98 00 85 99 00 00
Étape 3: Trouvez la 2e occurrence de celle-ci (assurez-vous que vous effectuez une recherche en haut du fichier).
00 00 00 00 00 00 80 00 00 80 00 00 00 80 80 00
80 00 00 00 80 00 80 00 80 80 00 00 c0 c0 c0 00
80 80 80 00 00 00 ff 00 00 ff 00 00 00 ff ff 00
ff 00 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00
et remplacer par
00 2b 36 00 07 36 42 00 58 6e 75 00 65 7b 83 00
83 94 96 00 93 a1 a1 00 ee e8 d5 00 fd f6 e3 00
b5 89 00 00 cb 4b 16 00 dc 32 2f 00 d3 36 82 00
6c 71 c4 00 26 8b d2 00 2a a1 98 00 85 99 00 00
Étape 4: Enregistrez le fichier dll puis ouvrez Excel> Editeur VBA> Outils> Options> Format de l'éditeur et définissez les couleurs du code.
Il est nécessaire de changer les deux chaînes car cela permet aux couleurs d’être correctement sauvegardées à l’arrêt et permet à l’éditeur de couleurs de s’ouvrir sans plantage d’Excel.
Merci à tous les précédents intervenants pour avoir mis le temps de comprendre cela!
J'ai créé un programme qui automatise tout cela, qui a passé beaucoup trop de temps dessus et qui s'est amusé à créer un sélecteur de couleur. Fabriqué en VB6 car pourquoi pas. Programme compilé et code source disponible ici . Testé sur mes versions de DLL et de VB6 uniquement, veuillez effectuer des sauvegardes avant de modifier quoi que ce soit - les emplacements sont corrigés dans le code.
C'est une très vieille question mais je voudrais peser pour être complet
Pour les couleurs VS2012 dans VBA ou VB6 IDE: Ouvrez VBE6.DLL/VBE7.DLL ou VBA6.DLL dans
C:\Program Files (x86)\Common Files\Microsoft shared\VBA\
or
C:\Program Files (x86)\VB98\ (Your VB6 install location)
avec votre éditeur hexadécimal
Remplacer la première occurrence de
ff ff ff 00 c0 c0 c0 00 80 80 80 00 00 00 00 00
ff 00 00 00 80 00 00 00 ff ff 00 00 80 80 00 00
00 ff 00 00 00 80 00 00 00 ff ff 00 00 80 80 00
00 00 ff 00 00 00 80 00 ff 00 ff 00 80 00 80 00
Avec
ff ff ff 00 1e 1e 1e 00 d4 d4 d4 00 00 00 00 00
ff 00 00 00 26 4f 78 00 ff ff 00 00 d6 9d 85 00
00 ff 00 00 60 8b 4e 00 00 ff ff 00 00 80 80 00
00 00 ff 00 56 9c d6 00 ff 00 ff 00 9f 74 b1 00
Revenez ensuite en haut et remplacez la deuxième occurrence de
00 00 00 00 00 00 80 00 00 80 00 00 00 80 80 00
80 00 00 00 80 00 80 00 80 80 00 00 c0 c0 c0 00
80 80 80 00 00 00 ff 00 00 ff 00 00 00 ff ff 00
ff 00 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00
avec
00 00 00 00 56 9c d6 00 60 8b 4e 00 d6 9d 85 00
26 4f 78 00 9f 74 b1 00 d6 9d 85 00 1e 1e 1e 00
d4 d4 d4 00 00 00 ff 00 00 ff 00 00 00 ff ff 00
ff 00 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00
Puis modifiez ce qui suit dans le registre
(For VBA)
HKEY_CURRENT_USER\Software\Microsoft\VBA\6.0\Common
HKEY_CURRENT_USER\Software\Microsoft\VBA\7.1\Common
(For VB6)
HKEY_CURRENT_USER\Software\Microsoft\VBA\Microsoft Visual Basic
FontFace = 'Consolas'
CodeForeColors = '8 3 5 4 1 10 14 3 4 4 0 0 0 0 0 0 '
CodeBackColors = '2 6 4 8 10 2 2 2 16 10 11 12 13 14 15 0 '
Si vous modifiez pour VBA vous avez terminé, pour VB6, ouvrez maintenant 'VB6.exe' dans votre éditeur Hex et modifiez la première occurrence de
00 00 00 00 00 00 80 00 00 80 00 00 00 80 80 00
80 00 00 00 80 00 80 00 80 80 00 00 c0 c0 c0 00
80 80 80 00 00 00 ff 00 00 ff 00 00 00 ff ff 00
ff 00 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00
avec
00 00 00 00 56 9c d6 00 60 8b 4e 00 d6 9d 85 00
26 4f 78 00 9f 74 b1 00 d6 9d 85 00 1e 1e 1e 00
d4 d4 d4 00 00 00 ff 00 00 ff 00 00 00 ff ff 00
ff 00 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00
Ceci corrige la couleur affichée dans l'interface de VB6 afin que vous puissiez, si vous souhaitez apporter d'autres modifications aux couleurs.
Merci à toutes les autres réponses, je ne l'ai pas inventé moi-même, je pensais qu'il était utile de disposer de toutes les informations requises dans un seul post (nulle part je n'ai vu modifier VB6.exe et VBA6.dll ensemble). En utilisant cette méthode, vous devriez pouvoir choisir librement parmi les couleurs disponibles.
J'ai également réorganisé les couleurs de certaines des autres réponses afin de ne pas changer vbRed, vbBlue, vbWhite, etc., vous devriez donc toujours obtenir le résultat souhaité dans le code. Cela n’a pas été complètement testé, donc modifiez toujours les programmes à vos risques et périls.
Ce serait bien de mettre sur pied un petit programme qui le fera pour vous (comme le faisait Gallaux). J'avais des problèmes pour écrire dans le registre et le VB6 IDE en utilisant ce programme, et une sorte de fenêtre d'aperçu serait bien.
Limites que j'ai trouvées: cela ne change pas la couleur des icônes d'indicateur, vous devez le faire vous-même.
Voici l'astuce pour garder votre sélection de couleur permanente. Un peu plus d'édition hexadécimale. Si vous avez effectué le remplacement suggéré par Bond , vous devez avoir les éléments suivants à portée de main: valeurs RGBA pour 16 couleurs de base (classiques) indexées de 0 à 15, et Les valeurs RGBA de vos couleurs personnalisées sont indexées de la même manière. Maintenant, recherchez dans VBEx.DLL la séquence d'octets construite à partir de valeurs RGBA "classiques" ordonnées dans la séquence d'index suivante: 15, 7, 8, 0, 12, 4, 14, 6, 10, 2, 11, 3, 9, 1 , 13, 5 (c'est-à-dire blanc, gris, gris foncé, noir, rouge, rouge foncé, etc.). Le modèle n'est pas aléatoire, il est dérivé de valeurs, stockées dans le registre, voir la publication de Tex Hex . La chaîne hexadécimale pour la recherche doit ressembler à 'FFFFFF00C0C0C0008080800000000000FF000000 ...', etc. 64 octets au total. Remplacez la séquence d'octets trouvés par des valeurs RGBA de couleurs "personnalisées" ordonnées de la même manière, par ex. 15, 7, 8, etc. Toutes les couleurs que vous choisissez dans l'interface utilisateur de VS seront stockées dans le registre et appliquées après le redémarrage de l'application. Eh bien, tous, sauf les couleurs "indicatrices". Ceux-ci réinitialisent toujours les valeurs par défaut. Remarques:
Merci à Tex Hex et Bond pour la recherche initiale.
UPD: testé avec MSO2007 (VBE6.DLL) et MSO2013 (VBE7.DLL). Travailler comme un charme.
La solution de Bond (édition de la table de couleurs dans VB6.exe) fonctionne parfaitement pour modifier la table de couleurs dans l'EDI VB6. Cependant, j'ai constaté que lorsqu'une couleur modifiée est sélectionnée et que VB6 est arrêté, VB6 n'est pas en mesure d'enregistrer correctement la couleur modifiée dans le registre.
Normalement, VB6 écrit un index dans la table des couleurs à 16 valeurs pour chaque élément de texte dont la couleur peut être modifiée.
Les indices de couleur sont écrits dans le registre ici:
HKEY_CURRENT_USER\Software\Microsoft\VBA\Microsoft Visual Basic\CodeForeColors
HKEY_CURRENT_USER\Software\Microsoft\VBA\Microsoft Visual Basic\CodeBackColors
Par exemple, la valeur CodeForeColors ressemblera à ceci:
6 14 5 0 1 3 13 4 15 0 0 0 0 0 0 0
Les valeurs comprises entre 1 et 16 représentent une couleur dans la table des couleurs et 0 signifie "Auto".
Toutefois, lorsqu'une couleur modifiée est sélectionnée, VB6 écrit dans le registre un nombre situé hors de la plage d'index et la valeur CodeForeColors ressemble à ceci:
5245006 14 5 0 1 3 13 4 15 0 0 0 0 0 0 0
Au prochain démarrage de VB6, il ne sera pas en mesure de définir la couleur correcte pour l'élément qui avait été défini sur la couleur modifiée.
J'essaie toujours de trouver une solution, mais je voulais publier ce que j'ai trouvé jusqu'à présent.