Estou trabalhando em alguns projetos para trabalhar com Excel e VBA, então não tenho escolha a não ser usar o editor do Microsoft Visual Basic. Normalmente, eu não me importaria, mas não consigo descobrir como definir uma cor personalizada para o editor (só posso escolher na paleta padrão).
Para alterar a cor atualmente, vou para Tools -> Options -> Editor Format
... No entanto, suas escolhas são limitadas apenas às 16 cores padrão (e básicas) - e quando digo básico, quero dizer básico , como rosa, azul, preto, branco, etc. ..
Alguém sabe como especificar uma cor personalizada ou, no mínimo, alterar algumas das cores que aparecem na paleta padrão?
Respostas:
O VBA lê as configurações das cores dessas chaves do Registro:
Cada uma dessas chaves contém uma lista de valores (separados por espaço) para cada entrada em Ferramentas -> Opções -> Formato do editor. Por exemplo, o primeiro valor dentro de CodeBackColors é a cor de plano de fundo e o primeiro valor dentro de CodeForeColors é a cor de primeiro plano do texto normal. Os valores são o ID interno da cor, 0 significa coloração AUTO, 11 mostra ciano, 5 vermelho etc.
Para tentar: Feche o Excel, altere o primeiro valor de CodeBackColors para 5 e reinicie o Excel. O plano de fundo do editor de código agora será vermelho.
O problema é que o Editor do VBA suporta apenas esses valores internos e o número mais alto que ele entende é 16. Qualquer outro valor não será aceito e o padrão volta para AUTO.
Eu tentei várias opções para inserir valores diferentes (por exemplo, 128255128, 16777215, #aaffee, 255 ou "170,255,238") e nenhum deles funcionou.
Portanto, acho que tecnicamente não é possível atribuir outras cores.
fonte
Criei um aplicativo com base nas informações encontradas aqui: https://github.com/dimitropoulos/VBECustomColors
Ele basicamente faz backup do arquivo .dll do VBE6 / VBE7 e permite o uso de cores personalizadas sem a necessidade de um editor hexadecimal.
Você pode baixá-lo aqui: https://github.com/gallaux/VBEThemeColorEditor
Apreciar
Edit: O código fonte já está disponível!
fonte
HKEY_CURRENT_USER\Software\Microsoft\VBA\7.1\Common
. [2] mudançaCodeBackColors
para:2 7 1 13 15 2 2 2 11 9 0 0 0 0 0 0
. [3] mudançaCodeForeColors
para:13 5 12 1 6 15 8 5 1 1 0 0 0 0 0 0
. [4] mudançaFontFace
para:Consolas
.TeX HeX está no local. No entanto, é possível alterar as 16 cores internas por conta própria. Requer apenas um pouco de edição hexadecimal. Aqui está um guia passo a passo. (Nota: Este é para o VB6 SP6, versão 6.0.97.82).
Faça backup do seu arquivo VB6.EXE na pasta do programa VB98. (Opcional, mas recomendado).
Inicie seu editor hexadecimal favorito (grite para HxD) e abra o VB6.EXE.
Vá para o endereço 0xE22F4. Este é o início da tabela de cores.
You should see four zeros. This represents the color black in RRGGBBAA format (alpha isn't supported so it's really just RRGGBB00 format). The next four bytes specify the next color and so on until you get to FFFFFF00 (white) ending at offset 0xE2333.
Edite qualquer um desses valores de quatro bytes à sua escolha. Basta usar os valores hexadecimais apropriados no formato RGB, seguidos por um byte zero. Por exemplo, RGB (64, 128, 192) seria 40 80 C0 00.
Salve suas alterações no EXE e inicie o VB6. Você deve ver suas novas cores nos slots anteriormente ocupados pelas cores internas do VB.
fonte
Como muitos observaram, a solução de Bond (edição hexadecimal da tabela de cores no VB6.exe) funcionará, mas você precisará entrar e redefinir as cores na caixa de diálogo de opções sempre que iniciar o VB6. Eu criei um AutoIt script que fará todo o trabalho para você, apenas edite-o conforme necessário, onde todas as chamadas para SetSyntaxColoring () são feitas:
Eu apenas o mantenho na área de trabalho e agora, sempre que preciso abrir o vb6, clico duas vezes nele e, assim, a cor da sintaxe está sob meu controle.
Editar 1: Otimizou um pouco o script para torná-lo mais rápido. Estou pensando em montar um programa que editará o VB6.EXE automaticamente, para facilitar a seleção de cores. Gostaria de saber se existe uma maneira de abandonar o script AutoIt, criando um plugin para o VS?
Editar 2: Criou um utilitário que permite editar as cores no exe sem a necessidade de usar um editor hexadecimal: VbClassicColorEditor . Esse link vai para o repositório público no bitbucket.
fonte
Eu só queria postar um resumo das respostas anteriores, pois não está totalmente claro o que precisa ser feito para alterar as cores no Editor VBA do Excel
No exemplo abaixo, estou adicionando o esquema de cores para Solarized e estou assumindo o uso do Office 2010
Etapa 0: Faça um backup do VBE7.dll antes de modificá-lo - você foi avisado !!!
Etapa 1: em um editor hexadecimal, abra o VBE7.dll localizado @
"C:\Program Files\Common Files\microsoft shared\VBA\VBA7\VBE7.DLL"
para 64 bitsou
"C:\Program Files( x86)\Common Files\microsoft shared\VBA\VBA7\VBE7.DLL"
para 32 bitsPasso 2: encontre a 1ª ocorrência de
e substitua por
Etapa 3: encontre a segunda ocorrência disso (pesquise na parte superior do arquivo)
e substitua por
Passo 4: salve o arquivo dll e abra o Excel> Editor VBA> Ferramentas> Opções> Formato do editor e defina as cores do código.
Alterar as duas strings não é necessário, pois permite que as cores sejam salvas corretamente no desligamento e permite que o editor de cores seja aberto sem falhas do Excel.
Obrigado a todos os respondentes anteriores por dedicarem um tempo para descobrir isso!
fonte
Eu criei um programa que automatiza tudo isso, gastei muito tempo nele e nos divertimos criando um seletor de cores. Feito em VB6 porque porque não. Programa compilado e código fonte disponível aqui . Testado apenas nas minhas versões de DLL e VB6, faça backups antes de alterar qualquer coisa - os locais são fixos no código.
Esta é uma pergunta muito antiga, mas eu gostaria de considerar a integridade
Para cores VS2012 no IDE VBA ou VB6: Abra VBE6.DLL / VBE7.DLL ou VBA6.DLL em
com seu editor hexadecimal
Substitua a primeira ocorrência de
Com
Em seguida, volte ao topo e substitua a segunda ocorrência de
com
Modifique o seguinte no registro
Se você está modificando para o VBA, conclua para o VB6 agora abra 'VB6.exe' no seu editor Hex e modifique a primeira ocorrência de
com
Isso corrige a cor exibida na interface do VB6, para que você possa fazer outras alterações nas cores.
Obrigado a todas as outras respostas, eu mesmo não pensei nisso, apenas achei útil ter todas as informações necessárias em uma única postagem (em nenhum lugar vi a modificação do VB6.exe e do VBA6.dll juntos). Usando esse método, você poderá selecionar livremente as cores disponíveis.
Também reordenei as cores de algumas das outras respostas, para não alterar vbRed, vbBlue, vbWhite etc., para que você ainda obtenha o resultado desejado no código. Isso não foi totalmente testado, portanto, sempre modifique os programas por sua conta e risco.
Seria bom montar um pequeno programa que faça isso por você (como o gallaux fez), tive problemas com a gravação no registro e no IDE do VB6 usando esse programa, e vir uma janela de visualização seria bom.
Limitações que encontrei: isso não muda a cor dos ícones indicadores, você deve fazer isso sozinho.
fonte
Tomando a isca da resposta de dnissley (onde ele pergunta se alguém poderia criar um suplemento), eu criei um suplemento para o VB6. É um pouco grosseiro (e vou explicar o porquê em breve), mas faz o trabalho.
Criei um novo projeto de suplemento no VB6, que me forneceu o formulário "frmAddin" padrão (que não uso) e o designer "Connect". Eu adicionei uma classe Color, que contém o seguinte:
E então alterei o código no Designer "Connect" da seguinte forma:
Esse código permite que o aplicativo leia as cores que eu quero de um arquivo que reside no mesmo diretório que o .dll (chamado VB6CodeColours.dat). Este arquivo contém o seguinte (e variará de acordo com as cores que você substituir no VB6.EXE, portanto, uma cópia e colagem direta provavelmente não funcionará.
Parece bobagem, mas eu vou explicar. Ele tem o formato "Cor do código", "Primeiro plano", "Plano de fundo", Indicador ", de modo que a linha superior defina o" Texto normal "para o 14º item do combo em Primeiro plano, o 12º para segundo plano e o 1º para o indicador .
Por que eu disse que é uma solução bastante grosseira: * Ele usa SendKeys. Não há mais explicações necessárias, tenho certeza :) * O usuário precisa clicar na opção de menu / barra de ferramentas para que ela entre em vigor. * O código não está melhor estruturado (na minha opinião), mas foi baseado na quantidade de tempo que eu poderia dedicar a ele no momento. Pretendo melhorá-lo no futuro, mas funciona bem para mim no estado atual (então provavelmente o deixarei!)
Talvez, com base, alguém possa expandir ainda mais.
fonte
Aqui está o truque de como manter sua seleção de cores permanente. Um pouco mais de edição hexadecimal. Se você fez a substituição sugerida por Bond, deve ter o seguinte em mãos: valores RGBA para 16 cores básicas (clássicas) indexadas de 0 a 15 e valores RGBA para suas cores personalizadas indexadas da mesma maneira. Agora procure no VBEx.DLL a sequência de bytes criada a partir dos valores RGBA "clássicos" ordenados na seguinte sequência de índices: 15, 7, 8, 0, 12, 4, 14, 6, 10, 2, 11, 3, 9, 1 , 13, 5 (ou seja, branco, cinza, cinza escuro, preto, vermelho, vermelho escuro etc.). O padrão não é aleatório, é derivado de valores, armazenados no registro, veja a publicação de Tex Hex. A sequência hexadecimal da pesquisa deve se parecer com 'FFFFFF00C0C0C0008080800000000000FF000000 ...', etc. Total de 64 bytes. Substitua a sequência de bytes encontrados pelos valores RGBA de cores "personalizadas" ordenadas da mesma maneira, por exemplo, 15, 7, 8, etc. Agora, todas as cores escolhidas na VS UI serão armazenadas no registro e aplicadas após a reinicialização do aplicativo. Bem, tudo, exceto as cores "indicadoras". Eles sempre são redefinidos para os padrões. Notas:
Agradecimentos a Tex Hex e Bond pela pesquisa inicial.
UPD: testado com MSO2007 (VBE6.DLL) e MSO2013 (VBE7.DLL). Trabalhe como um encanto.
fonte
A solução de Bond (editar a tabela de cores no VB6.exe) funciona perfeitamente para modificar a tabela de cores no IDE do VB6. No entanto, descobri que quando uma cor modificada é selecionada e o VB6 é desligado, o VB6 não pode salvar adequadamente a cor modificada no registro.
Normalmente, o VB6 grava um índice na tabela de cores com 16 valores para cada item de texto que pode ter sua cor modificada.
Os índices de cores são gravados no registro aqui:
Por exemplo, o valor CodeForeColors será algo como isto:
Os valores de 1 a 16 representam uma cor na tabela de cores e 0 significa 'Automático'.
No entanto, quando uma cor modificada é selecionada, o VB6 gravará um número fora do intervalo de índice no registro e o valor CodeForeColors será algo como isto:
Na próxima vez em que o VB6 for iniciado, ele não poderá definir a cor correta para o item que foi definido como a cor modificada.
Ainda estou tentando descobrir uma solução, mas queria postar o que encontrei até agora.
fonte