Я работаю над несколькими проектами для работы с использованием Excel и VBA, поэтому у меня нет выбора, кроме как использовать редактор Microsoft Visual Basic. Обычно я не возражаю, но я не могу понять, как установить собственный цвет для редактора (я могу выбрать только из палитры по умолчанию).
Чтобы изменить цвет в настоящее время, я перехожу к Tools -> Options -> Editor Format
... Однако, ваш выбор ограничен только стандартными (и базовыми) 16 цветами - и когда я говорю базовый, я имею в виду базовый , например розовый, синий, черный, белый и т. Д. ..
Кто-нибудь знает, как указать собственный цвет или, по крайней мере, изменить некоторые цвета, которые отображаются в палитре по умолчанию?
Ответы:
VBA считывает настройки цветов из этих разделов реестра:
Каждый из этих ключей содержит список значений (разделенных пробелом) для каждой записи в Инструменты -> Параметры -> Формат редактора. Например, первое значение внутри CodeBackColors - это цвет фона, а первое значение внутри CodeForeColors - это цвет переднего плана для обычного текста. Значения являются внутренним идентификатором цвета, 0 означает автоцвет, 11 показывает голубой, 5 красный и т. Д.
Чтобы попробовать: закройте Excel, измените первое значение CodeBackColors на 5 и перезапустите Excel. Фон редактора кода теперь будет красным.
Проблема заключается в том, что VBA Editor поддерживает только эти внутренние значения, и наибольшее значение, которое он понимает, равно 16. Любое другое значение не будет принято, и по умолчанию оно вернется к AUTO.
Я пробовал несколько вариантов ввода разных значений (например, 128255128, 16777215, #aaffee, 255 или "170,255,238"), и ни одно из них не сработало.
Поэтому я думаю, что технически невозможно назначить другие цвета.
источник
Я создал приложение на основе информации, найденной здесь: https://github.com/dimitropoulos/VBECustomColors
Он в основном создает резервную копию файла VBE6 / VBE7 .dll и позволяет использовать пользовательские цвета без использования шестнадцатеричного редактора.
Вы можете скачать его здесь: https://github.com/gallaux/VBEThemeColorEditor
наслаждаться
Изменить: Исходный код теперь доступен!
источник
HKEY_CURRENT_USER\Software\Microsoft\VBA\7.1\Common
. [2] ИзменениеCodeBackColors
к:2 7 1 13 15 2 2 2 11 9 0 0 0 0 0 0
. [3] ИзменениеCodeForeColors
к:13 5 12 1 6 15 8 5 1 1 0 0 0 0 0 0
. [4] ИзменениеFontFace
к:Consolas
.TeX HeX на месте. Тем не менее, можно изменить 16 встроенных цветов на свой собственный. Это просто требует немного шестнадцатеричного редактирования. Вот пошаговое руководство. (Примечание: это для VB6 SP6, версия файла 6.0.97.82).
Сделайте резервную копию файла VB6.EXE в папке с вашей программой VB98. (Необязательно, но рекомендуется).
Запустите ваш любимый шестнадцатеричный редактор (кричите HxD) и откройте VB6.EXE.
Перейдите по адресу 0xE22F4. Это начало таблицы цветов.
Вы должны увидеть четыре нуля. Это представляет черный цвет в формате RRGGBBAA (альфа не поддерживается, поэтому на самом деле это просто формат RRGGBB00). Следующие четыре байта задают следующий цвет и так далее, пока вы не получите FFFFFF00 (белый), заканчивающийся со смещением 0xE2333.
Отредактируйте любое из этих четырехбайтовых значений по вашему выбору. Просто используйте соответствующие шестнадцатеричные значения в формате RGB, за которым следует нулевой байт. Например, RGB (64, 128, 192) будет 40 80 C0 00.
Сохраните ваши изменения в EXE и запустите VB6. Вы должны увидеть свой новый цвет (ы) в слотах, ранее занятых встроенными цветами VB.
источник
Как уже отмечали многие, решение Бонда (шестнадцатеричное редактирование таблицы цветов в VB6.exe) будет работать, но вам придется заходить и сбрасывать цвета в диалоге настроек каждый раз при запуске VB6. Я создал скрипт AutoIt , который сделает всю работу за вас, просто отредактируйте его по мере необходимости, когда все вызовы SetSyntaxColoring () сделаны:
Я просто держу его на рабочем столе, и теперь, когда мне нужно открыть vb6, я просто дважды щелкаю по нему, и точно так же, как это окрашивание синтаксиса, находится под моим контролем.
Изменить 1: Немного оптимизирован скрипт, чтобы он работал быстрее. Я подумываю о том, чтобы собрать программу, которая автоматически отредактирует VB6.EXE для вас, чтобы облегчить выбор цвета. Интересно, есть ли способ отказаться от скрипта AutoIt, создав плагин для VS?
Редактировать 2: Создана утилита, которая позволяет редактировать цвета в exe без необходимости использовать шестнадцатеричный редактор: VbClassicColorEditor . Эта ссылка идет в публичный репозиторий на bitbucket.
источник
Я просто хотел опубликовать сводку предыдущих ответов, так как не совсем понятно, что нужно сделать, чтобы изменить цвета в редакторе Excel VBA.
В приведенном ниже примере я добавляю цветовую схему для Solarized и предполагаю использование Office 2010
Шаг 0: Сделайте резервную копию VBE7.dll перед его изменением - вы были предупреждены !!!
Шаг 1: В шестнадцатеричном редакторе откройте файл VBE7.dll, расположенный @
"C:\Program Files\Common Files\microsoft shared\VBA\VBA7\VBE7.DLL"
для 64 битили
"C:\Program Files( x86)\Common Files\microsoft shared\VBA\VBA7\VBE7.DLL"
для 32 битШаг 2: Найдите 1-ое вхождение
и заменить на
Шаг 3: Найдите 2-й случай этого (убедитесь, что вы ищете в верхней части файла)
и заменить на
Шаг 4. Сохраните файл DLL, а затем откройте Excel> VBA Editor> Инструменты> Параметры> Формат редактора и установите цвета кода.
Изменение обеих строк не обязательно, поскольку позволяет корректно сохранять цвета при выключении и позволяет редактору цветов открываться без сбоев в Excel.
Спасибо всем предыдущим авторам за то, что нашли время разобраться в этом!
источник
Я создал программу, которая автоматизирует все это, потратил слишком много времени на это и получил удовольствие от создания палитры цветов. Сделано в VB6, потому что почему бы и нет. Скомпилированная программа и исходный код доступны здесь . Протестировано только на моих версиях DLL и VB6, пожалуйста, сделайте резервные копии, прежде чем что-либо менять - местоположения зафиксированы в коде.
Это очень старый вопрос, но я хотел бы взвесить для полноты
Для цветов VS2012 в VBA или VB6 IDE: Откройте VBE6.DLL / VBE7.DLL или VBA6.DLL в
с вашим шестнадцатеричным редактором
Заменить первое вхождение
С
Затем вернитесь к началу и замените второе вхождение
с
Затем измените следующее в реестре
Если вы вносите изменения в VBA, то все готово, для VB6 теперь откройте «VB6.exe» в редакторе Hex и измените первое появление
с
Это исправляет цвет, отображаемый в интерфейсе VB6, так что если вы хотите внести другие изменения в цвета, вы можете.
Спасибо всем остальным ответам, я сам не придумал этого, просто подумал, что было бы полезно иметь всю информацию, требуемую в одном посте (нигде я не видел модификации VB6.exe и VBA6.dll вместе). Используя этот метод, вы сможете свободно выбирать из доступных цветов.
Я также переупорядочил цвета из некоторых других ответов, чтобы не менять vbRed, vbBlue, vbWhite и т. Д., Чтобы вы все равно получили желаемый результат в коде. Это не было полностью проверено, поэтому всегда изменяйте программы на свой страх и риск.
Было бы неплохо собрать небольшую программу, которая сделает это за вас (как это сделал gallaux), у меня были проблемы с записью в реестр и в IDE VB6 с использованием этой программы, и было бы неплохо, если бы окно предварительного просмотра было бы неплохо.
Ограничения, которые я нашел: это не меняет цвет значков индикатора, вы должны сделать это самостоятельно.
источник
Взяв приманку из ответа Днисли (где он спрашивает, может ли кто-нибудь сделать надстройку), я сделал надстройку для VB6. Это немного грубо (и я объясню почему в ближайшее время), но это делает работу.
Я создал новый проект надстройки в VB6, который дал мне стандартную форму "frmAddin" (которую я не использую) и конструктор "Connect". Я сам добавил класс Color, который содержит следующее:
А затем я изменил код в конструкторе «Соединение» следующим образом:
Этот код позволяет приложению читать нужные мне цвета из файла, который находится в том же каталоге, что и .dll (называемый VB6CodeColours.dat). Этот файл содержит следующее (и он будет зависеть от того, какие цвета вы заменяете в VB6.EXE, поэтому прямое копирование и вставка, вероятно, не будут работать.
Выглядит бред, но я объясню. Он имеет формат «Цвет кода», «Передний план», «Фон», «Индикатор», поэтому в верхней строке будет установлен «Обычный текст» для 14-го элемента в поле со списком для «Переднего плана», 12-го для фона и 1-го для индикатора. ,
Почему я сказал, что это довольно грубое решение: * Он использует SendKeys. Я уверен, что дальнейших объяснений здесь не требуется :) * Пользователь должен нажать на опцию меню / панели инструментов, чтобы она вступила в силу. * Код, на мой взгляд, не очень хорошо структурирован, но основан на количестве времени, которое я мог бы посвятить ему в то время. Я стремлюсь улучшить его в будущем, но он отлично работает для меня в текущем состоянии (поэтому я, вероятно, оставлю это!)
Возможно, с основой, кто-то может расширить это дальше.
источник
Вот трюк, как сохранить постоянный выбор цвета. Немного больше шестнадцатеричного редактирования. Если вы сделали замену, предложенную Bond, у вас должно быть следующее: значения RGBA для основных (классических) 16 цветов, проиндексированные от 0 до 15, и значения RGBA для ваших пользовательских цветов, проиндексированные таким же образом. Теперь ищите в VBEx.DLL последовательность байтов, построенную из «классических» значений RGBA, упорядоченных в следующей последовательности индексов: 15, 7, 8, 0, 12, 4, 14, 6, 10, 2, 11, 3, 9, 1 , 13, 5 (т.е. белый, серый, темно-серый, черный, красный, темно-красный и т. Д.). Шаблон не случайный, он получен из значений, хранящихся в реестре, см . Пост Tex Hex, Шестнадцатеричная строка для поиска должна выглядеть как «FFFFFF00C0C0C0008080800000000000FF000000 ...» и т. Д. Всего 64 байта. Замените найденную последовательность байтов значениями RGBA «пользовательских» цветов, упорядоченных таким же образом, например, 15, 7, 8 и т. Д. Теперь все цвета, выбранные вами в VS UI, будут сохранены в реестре и применены после перезапуска приложения. Ну все, кроме «индикаторных» цветов. Они всегда сбрасываются на значения по умолчанию. Заметки:
Спасибо Tex Hex и Bond за начальные исследования.
UPD: протестировано с MSO2007 (VBE6.DLL) и MSO2013 (VBE7.DLL). Работай как шарм.
источник
Решение Бонда (редактирование таблицы цветов в VB6.exe) идеально подходит для изменения таблицы цветов в IDE VB6. Однако я обнаружил, что когда выбран измененный цвет и VB6 выключен, VB6 не может правильно сохранить измененный цвет в реестре.
Обычно VB6 записывает индекс в таблицу цветов из 16 значений для каждого текстового элемента, для которого можно изменить его цвет.
Индексы цвета записываются в реестр здесь:
Например, значение CodeForeColors будет выглядеть примерно так:
Значения от 1 до 16 представляют цвет в таблице цветов, а 0 означает «Авто».
Однако, когда выбран измененный цвет, VB6 запишет число вне диапазона индекса в реестр, а значение CodeForeColors будет выглядеть примерно так:
При следующем запуске VB6 он не сможет установить правильный цвет для элемента, для которого был установлен измененный цвет.
Я все еще пытаюсь найти решение, но хотел опубликовать то, что я нашел до сих пор.
источник