Je travaille sur quelques projets pour travailler avec Excel et VBA, donc je n'ai pas d'autre choix que d'utiliser l'éditeur Microsoft Visual Basic. Normalement, cela ne me dérangerait pas, mais je ne sais 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 ne sont limités qu'aux 16 couleurs par défaut (et basiques) - 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 qui apparaissent dans la palette par défaut?
Réponses:
VBA lit les paramètres des couleurs à partir de ces clés de registre:
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 de CodeBackColors est la couleur d'arrière-plan et la première valeur à l'intérieur de CodeForeColors est la couleur de premier plan pour le texte normal. Les valeurs sont l'identifiant interne de la couleur, 0 signifie coloration AUTO, 11 montre cyan, 5 rouge etc.
Pour l'essayer: Fermez Excel, modifiez la première valeur de CodeBackColors à 5 et redémarrez Excel. L'arrière-plan de l'éditeur de code sera désormais rouge.
Le problème est que l'éditeur VBA ne prend en charge que ces valeurs internes et le nombre le plus élevé qu'il comprend est 16. Toute autre valeur ne sera pas acceptée et reviendra par défaut à AUTO.
J'ai essayé plusieurs options de saisie de valeurs différentes (par exemple 128255128, 16777215, #aaffee, 255 ou "170,255,238") et aucune n'a fonctionné.
Par conséquent, je pense qu'il n'est techniquement pas possible d'attribuer d'autres couleurs.
la source
J'ai créé une application basée sur les informations trouvées ici: https://github.com/dimitropoulos/VBECustomColors
Il sauvegarde essentiellement 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!
la source
HKEY_CURRENT_USER\Software\Microsoft\VBA\7.1\Common
. [2] changementCodeBackColors
à:2 7 1 13 15 2 2 2 11 9 0 0 0 0 0 0
. Changement [3]CodeForeColors
à:13 5 12 1 6 15 8 5 1 1 0 0 0 0 0 0
. Changement [4]FontFace
à:Consolas
.TeX HeX est parfait. Cependant, il est possible de changer 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 du VB6 SP6, version de fichier 6.0.97.82).
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 donc c'est vraiment juste le format RRGGBB00). Les quatre octets suivants spécifient la couleur suivante et ainsi de suite jusqu'à ce que vous arriviez à FFFFFF00 (blanc) se terminant à l'offset 0xE2333.
Modifiez l'une de ces valeurs de quatre octets à votre choix. Utilisez simplement les valeurs hexadécimales appropriées au format RVB, suivies d'un octet zéro. Par exemple, RVB (64, 128, 192) serait 40 80 C0 00.
Enregistrez vos modifications dans l'EXE et lancez VB6. Vous devriez voir vos nouvelles couleurs dans les emplacements précédemment occupés par les couleurs VB intégrées.
la source
Comme beaucoup l'ont noté, la solution de Bond (édition hexadécimale de la table des couleurs dans VB6.exe) fonctionnera mais vous devrez entrer et réinitialiser vos couleurs dans la boîte de dialogue des options à chaque démarrage de VB6. J'ai créé un script AutoIt qui fera tout le travail pour vous, il suffit de le modifier si nécessaire où tous les appels à SetSyntaxColoring () sont effectués:
Je le garde juste sur mon bureau et maintenant chaque fois que je dois ouvrir vb6, je double-clique dessus et tout comme la coloration de la syntaxe est sous mon contrôle.
Edit 1: optimisé un peu le script pour le faire fonctionner plus rapidement. Je pense à mettre sur pied un programme qui éditera automatiquement VB6.EXE pour faciliter la sélection des couleurs. Je me demande s'il y a un moyen d'abandonner le script AutoIt en créant un plugin pour VS?
Edit 2: a créé un utilitaire qui vous permet d'éditer les couleurs dans l'exe sans avoir à utiliser un éditeur hexadécimal: VbClassicColorEditor . Ce lien va au dépôt public sur bitbucket.
la source
Je voulais juste publier un résumé des réponses précédentes car il n'est pas entièrement clair ce qui doit être fait pour changer les couleurs dans l'éditeur Excel VBA
Dans l'exemple ci-dessous, j'ajoute le schéma de couleurs pour Solarized et je suppose que l'utilisation d'Office 2010
Étape 0: Faites une sauvegarde du VBE7.dll avant de le modifier - vous avez été averti !!!
Étape 1: dans un éditeur hexadécimal, ouvrez le VBE7.dll situé @
"C:\Program Files\Common Files\microsoft shared\VBA\VBA7\VBE7.DLL"
pour 64 bitsou
"C:\Program Files( x86)\Common Files\microsoft shared\VBA\VBA7\VBE7.DLL"
pour 32 bitsÉtape 2: Trouvez la 1ère occurrence de
et remplacer par
Étape 3: Trouvez la deuxième occurrence de cela (assurez-vous de rechercher en haut du fichier)
et remplacer par
Étape 4: enregistrez le fichier dll, puis ouvrez Excel> Éditeur VBA> Outils> Options> Format de l'éditeur et définissez les couleurs du code.
La modification des deux chaînes est nécessaire car elle permet aux couleurs de s'enregistrer correctement à l'arrêt et permet à l'éditeur de couleurs de s'ouvrir sans se bloquer.
Merci à tous les répondeurs précédents d'avoir pris le temps de comprendre cela!
la source
J'ai créé un programme qui automatise tout cela, j'ai passé trop de temps dessus, j'ai eu du plaisir à créer un sélecteur de couleurs. Fabriqué en VB6 car pourquoi pas. Programme compilé et code source disponibles ici . Testé sur mes versions de DLL et VB6 uniquement, veuillez faire des sauvegardes avant de changer quoi que ce soit - les emplacements sont fixes dans le code.
Ceci 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
avec votre éditeur hexadécimal
Remplacez la première occurrence de
Avec
Revenez ensuite en haut et remplacez la deuxième occurrence de
avec
Modifiez ensuite les éléments suivants dans le registre
Si vous modifiez pour VBA, vous avez terminé, pour VB6, ouvrez maintenant «VB6.exe» dans votre éditeur hexadécimal et modifiez la première occurrence de
avec
Cela corrige la couleur affichée dans l'interface de VB6 de sorte que si vous souhaitez apporter d'autres modifications aux couleurs, vous pouvez.
Merci à toutes les autres réponses, je n'ai pas trouvé cela moi-même, je pensais simplement qu'il était utile d'avoir toutes les informations requises dans un seul post (je n'ai vu nulle part 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é entièrement testé afin de toujours modifier les programmes à vos risques et périls.
Ce serait bien de mettre sur pied un petit programme qui fera cela pour vous (comme Gallaux), j'ai eu des problèmes d'écriture dans le registre et l'IDE VB6 en utilisant ce programme, et une sorte de fenêtre d'aperçu serait bien.
Limitations que j'ai trouvées: cela ne change pas la couleur des icônes d'indicateur, vous devez le faire vous-même.
la source
En prenant l'appât de la réponse de dnissley (où il demande si quelqu'un pourrait faire un complément), j'ai fait un complément pour VB6. C'est un peu grossier (et je vais vous expliquer pourquoi sous peu), mais ça fait l'affaire.
J'ai créé un nouveau projet de complément dans VB6 qui m'a donné le formulaire par défaut "frmAddin" (que je n'utilise pas) et le concepteur "Connect". J'ai moi-même ajouté une classe Color qui contient les éléments suivants:
Et puis j'ai modifié le code dans le concepteur "Connect" comme suit:
Ce code permet à l'application de lire les couleurs que je veux à partir d'un fichier qui réside dans le même répertoire que le .dll (appelé VB6CodeColours.dat). Ce fichier contient les éléments suivants (et il variera en fonction des couleurs que vous remplacez dans le VB6.EXE, donc un simple copier-coller ne fonctionnera probablement pas.
On dirait du charabia, mais je vais t'expliquer. Il a le format "Code Color", "Foreground", "Background", Indicator "de sorte que la ligne supérieure définira le" Normal Text "sur le 14ème élément du combo pour le premier plan, le 12 pour le fond et le 1er pour l'indicateur .
Pourquoi j'ai dit que c'était une solution assez brute: * Il utilise SendKeys. Aucune autre explication n'est nécessaire là, je suis sûr :) * L'utilisateur doit cliquer sur l'option menu / barre d'outils pour qu'elle prenne effet. * Le code n'est pas le mieux structuré (à mon avis) mais était basé sur le temps que je pouvais y consacrer à l'époque. Je vise à l'améliorer à l'avenir, mais cela fonctionne bien pour moi dans l'état actuel (donc je vais probablement le laisser!)
Peut-être avec une base, quelqu'un peut-il développer davantage.
la source
Voici l'astuce pour conserver votre sélection de couleurs permanente. Un peu plus d'édition hexadécimale. Si vous avez effectué le remplacement suggéré par Bond, vous devriez avoir les éléments suivants à portée de main: les valeurs RGBA pour les couleurs de base (classiques) 16 indexées de 0 à 15 et les valeurs RGBA pour vos couleurs personnalisées indexées de la même manière. Recherchez maintenant dans VBEx.DLL la séquence d'octets construite à partir des 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.-à-d. Blanc, gris, gris foncé, noir, rouge, rouge foncé, etc.). Le modèle n'est pas aléatoire, il est dérivé de valeurs, stocké dans le registre, voir le post de Tex Hex. La chaîne hexadécimale de 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 exemple 15, 7, 8, etc. Maintenant, toutes les couleurs que vous choisissez dans VS UI seront stockées dans le registre et appliquées après le redémarrage de l'application. Eh bien, toutes, mais des couleurs "indicatrices". Ceux-ci sont toujours réinitialisés aux valeurs par défaut. Remarques:
Merci à Tex Hex et Bond pour leurs recherches initiales.
UPD: testé avec MSO2007 (VBE6.DLL) et MSO2013 (VBE7.DLL). Travaillez comme un charme.
la source
La solution de Bond (modification de la table des couleurs dans VB6.exe) fonctionne parfaitement pour modifier la table des couleurs dans l'IDE 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:
Par exemple, la valeur CodeForeColors ressemblera à ceci:
Les valeurs de 1 à 16 représentent une couleur dans la table des couleurs et 0 signifie «Auto».
Cependant, lorsqu'une couleur modifiée est sélectionnée, VB6 écrira un nombre en dehors de la plage d'index dans le registre et la valeur CodeForeColors ressemblera à ceci:
Au prochain démarrage de VB6, il ne sera pas en mesure de définir la couleur correcte pour l'élément qui a é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.
la source