Estoy trabajando en algunos proyectos para trabajar con Excel y VBA, así que no tengo más remedio que usar el editor de Microsoft Visual Basic. Normalmente no me importaría, pero no puedo entender cómo configurar un color personalizado para el editor (solo puedo elegir de la paleta predeterminada).
Para cambiar el color actualmente, voy a Tools -> Options -> Editor Format
... Sin embargo, sus opciones solo se limitan a los 16 colores predeterminados (y básicos), y cuando digo básico, me refiero a básico , como rosa, azul, negro, blanco, etc. ..
¿Alguien sabe cómo especificar un color personalizado o, como mínimo, cambiar algunos de los colores que aparecen en la paleta predeterminada?
microsoft-office
microsoft-excel-2007
text-editors
vba
Penetración
fuente
fuente
Respuestas:
VBA lee la configuración de los colores de estas claves de registro:
Cada una de estas claves contiene una lista de valores (separados por espacio) para cada entrada dentro de Herramientas -> Opciones -> Formato del editor. Por ejemplo, el primer valor dentro de CodeBackColors es el color de fondo y el primer valor dentro de CodeForeColors es el color de primer plano para el texto normal. Los valores son la identificación interna del color, 0 significa coloración AUTO, 11 muestra cian, 5 rojo, etc.
Para intentarlo: cierre Excel, cambie el primer valor de CodeBackColors a 5 y reinicie Excel. El fondo del editor de código ahora será rojo.
El problema es que el Editor de VBA solo admite estos valores internos y el número más alto que entiende es 16. Cualquier otro valor no será aceptado y su valor predeterminado es AUTO.
He intentado varias opciones para ingresar valores diferentes (por ejemplo, 128255128, 16777215, #aaffee, 255 o "170,255,238") y ninguna de ellas funcionó.
Por lo tanto, creo que técnicamente no es posible asignar otros colores.
fuente
Creé una aplicación basada en la información que se encuentra aquí: https://github.com/dimitropoulos/VBECustomColors
Básicamente hace una copia de seguridad del archivo .dll VBE6 / VBE7 y permite el uso de colores personalizados sin tener que usar un editor hexadecimal.
Puede descargarlo aquí: https://github.com/gallaux/VBEThemeColorEditor
Disfrutar
Editar: ¡El código fuente ya está disponible!
fuente
HKEY_CURRENT_USER\Software\Microsoft\VBA\7.1\Common
. [2] El cambioCodeBackColors
a:2 7 1 13 15 2 2 2 11 9 0 0 0 0 0 0
. [3] El cambioCodeForeColors
a:13 5 12 1 6 15 8 5 1 1 0 0 0 0 0 0
. [4] El cambioFontFace
a:Consolas
.TeX HeX es perfecto. Sin embargo, ES posible cambiar los 16 colores incorporados con los suyos. Solo requiere un poco de edición hexadecimal. Aquí hay una guía paso a paso. (Nota: Esto es para VB6 SP6, versión de archivo 6.0.97.82).
Haga una copia de seguridad de su archivo VB6.EXE en su carpeta de programa VB98. (Opcional, pero recomendado).
Encienda su editor hexadecimal favorito (grite a HxD) y abra VB6.EXE.
Salte a la dirección 0xE22F4. Este es el comienzo de la tabla de colores.
Deberías ver cuatro ceros. Esto representa el color negro en formato RRGGBBAA (alfa no es compatible, por lo que en realidad es solo formato RRGGBB00). Los siguientes cuatro bytes especifican el siguiente color y así sucesivamente hasta llegar a FFFFFF00 (blanco) que termina en el desplazamiento 0xE2333.
Edite cualquiera de estos valores de cuatro bytes a su elección. Simplemente use los valores hexadecimales apropiados en formato RGB, seguidos de un byte cero. Por ejemplo, RGB (64, 128, 192) sería 40 80 C0 00.
Guarde sus cambios en el EXE y encienda VB6. Debería ver sus nuevos colores en las ranuras ocupadas anteriormente por los colores VB incorporados.
fuente
Como muchos han notado, la solución de Bond (edición hexadecimal de la tabla de colores en VB6.exe) funcionará, pero deberá ingresar y restablecer sus colores en el cuadro de diálogo de opciones cada vez que inicie VB6. He creado un script AutoIt que hará todo el trabajo por usted, solo edítelo según sea necesario donde se realicen todas las llamadas a SetSyntaxColoring ():
Simplemente lo mantengo en mi escritorio y ahora, cuando tengo que abrir vb6, simplemente hago doble clic en él y, al igual que ese color de sintaxis, está bajo mi control.
Edición 1: Optimicé un poco el script para que se ejecute más rápido. Estoy pensando en crear un programa que edite VB6.EXE automáticamente para que pueda facilitar la selección de color. Me pregunto si hay una manera de deshacerse del script AutoIt creando un complemento para VS.
Edición 2: creó una utilidad que le permite editar los colores en el exe sin tener que usar un editor hexadecimal: VbClassicColorEditor . Ese enlace va al repositorio público en bitbucket.
fuente
Solo quería publicar un resumen de las respuestas anteriores, ya que no está del todo claro qué se debe hacer para cambiar los colores en el Editor de Excel VBA
En el ejemplo a continuación, agrego el esquema de color para Solarized y supongo el uso de Office 2010
Paso 0: Realice una copia de seguridad del VBE7.dll antes de modificarlo: ¡se le ha advertido!
Paso 1: en un editor hexadecimal, abra el VBE7.dll ubicado @
"C:\Program Files\Common Files\microsoft shared\VBA\VBA7\VBE7.DLL"
para 64 bitso
"C:\Program Files( x86)\Common Files\microsoft shared\VBA\VBA7\VBE7.DLL"
para 32 bitsPaso 2: Encuentra la primera aparición de
y reemplazar con
Paso 3: encuentre la segunda aparición de esto (asegúrese de buscar desde la parte superior del archivo)
y reemplazar con
Paso 4: guarde el archivo dll y luego abra Excel> Editor VBA> Herramientas> Opciones> Formato del editor y configure los colores del código.
El cambio de ambas cadenas es muy complejo, ya que permite que los colores se guarden correctamente al apagar y permite que el editor de colores se abra sin sobresalir.
¡Gracias a todos los respondedores anteriores por dedicar tiempo a resolver esto!
fuente
Creé un programa que automatiza todo esto, pasé demasiado tiempo en él, me divertí creando un selector de color. Hecho en VB6 porque por qué no. Programa compilado y código fuente disponible aquí . Probado solo en mis versiones de las DLL y VB6, haga copias de seguridad antes de cambiar cualquier cosa: las ubicaciones están fijadas en el código.
Esta es una pregunta muy antigua, pero me gustaría evaluar la integridad
Para colores VS2012 en VBA o VB6 IDE: Abra VBE6.DLL / VBE7.DLL o VBA6.DLL en
con tu editor hexadecimal
Reemplazar la primera aparición de
Con
Luego regrese a la parte superior y reemplace la segunda aparición de
con
Luego modifique lo siguiente en el registro
Si está modificando para VBA ya está hecho, para VB6 ahora abra 'VB6.exe' en su editor Hex y modifique la primera aparición de
con
Esto corrige el color que se muestra en la interfaz de VB6, de modo que si desea realizar otros cambios en los colores, puede hacerlo.
Gracias a todas las otras respuestas, no se me ocurrió esto solo, pensé que era útil tener toda la información requerida en una sola publicación (en ninguna parte vi modificar VB6.exe y VBA6.dll juntos). Con este método, debería poder seleccionar libremente entre los colores disponibles.
También reordené los colores de algunas de las otras respuestas para no cambiar vbRed, vbBlue, vbWhite, etc., por lo que aún debería obtener el resultado deseado en el código. Esto no se ha probado completamente, por lo que siempre debe modificar los programas bajo su propio riesgo.
Sería bueno armar un pequeño programa que haga esto por usted (como lo hizo gallaux), tuve problemas para escribir en el registro y el IDE de VB6 usando ese programa, y aparecería una especie de ventana de vista previa sería bueno.
Limitaciones que he encontrado: esto no cambia el color de los íconos indicadores, debe hacerlo usted mismo.
fuente
Tomando el anzuelo de la respuesta de dnissley (donde pregunta si alguien podría hacer un complemento), hice un complemento para VB6. Es un poco crudo (y explicaré por qué en breve), pero hace el trabajo.
Creé un nuevo proyecto de Complemento en VB6 que me dio la forma predeterminada "frmAddin" (que no uso) y el diseñador "Connect". Yo mismo agregué una clase de Color que contiene lo siguiente:
Y luego modifiqué el código en el Diseñador "Connect" para que sea el siguiente:
Este código permite que la aplicación lea los colores que quiero de un archivo que reside en el mismo directorio que el .dll (llamado VB6CodeColours.dat). Este archivo contiene lo siguiente (y variará según los colores que reemplace en el VB6.EXE, por lo que una copia y pegado directo probablemente no funcione.
Parece galimatías, pero te lo explicaré. Tiene el formato "Código de color", "Primer plano", "Fondo", Indicador ", por lo que la fila superior establecerá el" Texto normal "en el 14º elemento del combo para Primer plano, el 12º para Fondo y el 1º para el Indicador .
Por qué dije que es una solución bastante cruda: * Utiliza SendKeys. No necesito más explicaciones allí, estoy seguro :) * El usuario debe hacer clic en la opción del menú / barra de herramientas para que surta efecto. * El código no está mejor estructurado (en mi opinión) pero se basó en la cantidad de tiempo que podía dedicarle en ese momento. Mi objetivo es mejorarlo en el futuro, pero funciona bien para mí en el estado actual (¡así que probablemente lo dejaré!)
Quizás con una base, alguien puede ampliarlo aún más.
fuente
Aquí está el truco de cómo mantener su selección de color permanente. Un poco más de edición hexadecimal. Si realizó el reemplazo sugerido por Bond , debe tener a mano lo siguiente: valores RGBA para 16 colores básicos (clásicos) indexados de 0 a 15, y valores RGBA para sus colores personalizados indexados de la misma manera. Ahora busque VBEx.DLL para la secuencia de bytes construida a partir de valores RGBA "clásicos" ordenados en la siguiente secuencia de índices: 15, 7, 8, 0, 12, 4, 14, 6, 10, 2, 11, 3, 9, 1 , 13, 5 (es decir, blanco, gris, gris oscuro, negro, rojo, rojo oscuro, etc.). El patrón no es aleatorio, se deriva de valores, almacenados en el registro, vea la publicación de Tex Hex. La cadena hexadecimal para la búsqueda debería verse como 'FFFFFF00C0C0C0008080800000000000FF000000 ...', etc. 64 bytes en total. Reemplace la secuencia de bytes encontrados con valores RGBA de colores "personalizados" ordenados de la misma manera, por ejemplo, 15, 7, 8, etc. Ahora todos los colores que elija en VS UI se almacenarán en el registro y se aplicarán después del reinicio de la aplicación. Bueno, todos, pero los colores "indicadores". Estos siempre se restablecen a los valores predeterminados. Notas:
Gracias a Tex Hex y Bond por la investigación inicial.
UPD: Probado con MSO2007 (VBE6.DLL) y MSO2013 (VBE7.DLL). Trabajar como un encanto.
fuente
La solución de Bond (editar la tabla de colores en VB6.exe) funciona perfectamente para modificar la tabla de colores en el IDE de VB6. Sin embargo, descubrí que cuando se selecciona un color modificado y se apaga VB6, VB6 no puede guardar correctamente el color modificado en el registro.
Normalmente, VB6 escribirá un índice en la tabla de colores de 16 valores para cada elemento de texto que pueda modificar su color.
Los índices de color se escriben en el registro aquí:
Por ejemplo, el valor de CodeForeColors se verá así:
Los valores del 1 al 16 representan un color en la tabla de colores y 0 significa 'Auto'.
Sin embargo, cuando se selecciona un color modificado, VB6 escribirá un número fuera del rango del índice en el registro y el valor de CodeForeColors se verá así:
La próxima vez que se inicie VB6, no podrá establecer el color correcto para el elemento que se había configurado con el color modificado.
Todavía estoy tratando de encontrar una solución, pero quería publicar lo que he encontrado hasta ahora.
fuente