Pracuję nad kilkoma projektami do pracy przy użyciu Excela i VBA, więc nie mam wyboru i muszę użyć edytora Microsoft Visual Basic. Zwykle nie miałbym nic przeciwko, ale nie mogę wymyślić, jak ustawić niestandardowy kolor dla edytora (mogę tylko wybrać domyślną paletę).
Aby zmienić kolor obecnie, przechodzę do Tools -> Options -> Editor Format
... Jednak twoje wybory są ograniczone tylko do domyślnych (i podstawowych) 16 kolorów - a kiedy mówię podstawowy, mam na myśli podstawowe , takie jak różowy, niebieski, czarny, biały itp. ..
Czy ktoś wie, jak albo określić niestandardowy kolor, albo przynajmniej zmienić niektóre kolory wyświetlane w domyślnej palecie?
Odpowiedzi:
VBA odczytuje ustawienia kolorów z tych kluczy rejestru:
Każdy z tych kluczy zawiera listę wartości (oddzielonych spacją) dla każdego wpisu w Narzędziach -> Opcje -> Format edytora. Na przykład pierwsza wartość w CodeBackColors to kolor tła, a pierwsza wartość w CodeForeColors to kolor pierwszego planu dla normalnego tekstu. Wartości są wewnętrznym identyfikatorem koloru, 0 oznacza automatyczne kolorowanie, 11 pokazuje cyjan, 5 czerwonych itp.
Aby spróbować: Zamknij program Excel, zmień pierwszą wartość CodeBackColors na 5 i uruchom ponownie program Excel. Tło edytora kodu będzie teraz czerwone.
Problem polega na tym, że edytor VBA obsługuje tylko te wartości wewnętrzne, a najwyższa liczba, jaką rozumie, to 16. Każda inna wartość nie zostanie zaakceptowana i domyślnie zostanie przywrócona wartość AUTO.
Wypróbowałem kilka opcji wprowadzania różnych wartości (np. 128255128, 16777215, #aaffee, 255 lub „170,255,238”) i żadna z nich nie zadziałała.
Dlatego myślę, że technicznie nie jest możliwe przypisanie innych kolorów.
źródło
Stworzyłem aplikację na podstawie informacji tutaj: https://github.com/dimitropoulos/VBECustomColors
Zasadniczo tworzy kopię zapasową pliku .dll VBE6 / VBE7 i umożliwia stosowanie niestandardowych kolorów bez konieczności korzystania z edytora szesnastkowego.
Możesz go pobrać tutaj: https://github.com/gallaux/VBEThemeColorEditor
Cieszyć się
Edycja: Kod źródłowy jest już dostępny!
źródło
HKEY_CURRENT_USER\Software\Microsoft\VBA\7.1\Common
. [2] ZmianaCodeBackColors
do:2 7 1 13 15 2 2 2 11 9 0 0 0 0 0 0
. [3] ZmianaCodeForeColors
do:13 5 12 1 6 15 8 5 1 1 0 0 0 0 0 0
. [4] ZmianaFontFace
do:Consolas
.TeX HeX jest na miejscu. Można jednak zmienić 16 wbudowanych kolorów za pomocą własnych. To wymaga tylko trochę edycji szesnastkowej. Oto przewodnik krok po kroku. (Uwaga: dotyczy VB6 SP6, wersja pliku 6.0.97.82).
Wykonaj kopię zapasową pliku VB6.EXE w folderze programu VB98. (Opcjonalne, ale zalecane).
Uruchom swój ulubiony edytor hex (wykrzycz do HxD) i otwórz VB6.EXE.
Przejdź do adresu 0xE22F4. To jest początek tabeli kolorów.
Powinieneś zobaczyć cztery zera. To reprezentuje kolor czarny w formacie RRGGBBAA (alfa nie jest obsługiwane, więc tak naprawdę jest to tylko format RRGGBB00). Następne cztery bajty określają następny kolor i tak dalej, aż dojdziesz do FFFFFF00 (biały) kończącego się na offset 0xE2333.
Edytuj dowolną z tych czterobajtowych wartości do wyboru. Wystarczy użyć odpowiednich wartości szesnastkowych w formacie RGB, po których następuje zero bajtów. Na przykład RGB (64, 128, 192) wynosiłby 40 80 C0 00.
Zapisz zmiany w EXE i uruchom VB6. Powinieneś zobaczyć swoje nowe kolory w gniazdach wcześniej zajmowanych przez wbudowane kolory VB.
źródło
Jak wielu zauważyło, rozwiązanie Bonda (edycja szesnastkowa tabeli kolorów w VB6.exe) będzie działać, ale będziesz musiał wejść i zresetować kolory w oknie dialogowym opcji przy każdym uruchomieniu VB6. Stworzyłem skrypt AutoIt , który wykona całą pracę za Ciebie, po prostu edytuj go, jeśli to konieczne, w miejscu, w którym wykonywane są wszystkie wywołania SetSyntaxColoring ():
Po prostu trzymam go na pulpicie i teraz, kiedy muszę otworzyć vb6, po prostu dwukrotnie go klikam i tak, że ta kolorystyka składniowa jest pod moją kontrolą.
Edycja 1: Zoptymalizowano nieco skrypt, aby działał szybciej. Zastanawiam się nad stworzeniem programu, który będzie automatycznie edytował VB6.EXE, aby ułatwić wybór kolorów. Zastanawiam się, czy istnieje sposób, aby porzucić skrypt AutoIt, tworząc wtyczkę dla VS?
Edycja 2: Utworzono narzędzie, które pozwala edytować kolory w pliku exe bez konieczności używania edytora szesnastkowego: VbClassicColorEditor . Ten link prowadzi do publicznego repozytorium na bitbucket.
źródło
Chciałem tylko opublikować podsumowanie poprzednich odpowiedzi, ponieważ nie jest całkowicie jasne, co należy zrobić, aby zmienić kolory w edytorze Excel VBA
W poniższym przykładzie dodałem schemat kolorów dla Solarized i zakładam użycie pakietu Office 2010
Krok 0: Wykonaj kopię zapasową VBE7.dll przed modyfikacją - zostałeś ostrzeżony !!!
Krok 1: W edytorze heksadecymalnym otwórz plik VBE7.dll znajdujący się @
"C:\Program Files\Common Files\microsoft shared\VBA\VBA7\VBE7.DLL"
dla 64bitlub
"C:\Program Files( x86)\Common Files\microsoft shared\VBA\VBA7\VBE7.DLL"
dla 32bitKrok 2: Znajdź 1. wystąpienie
i zamień na
Krok 3: Znajdź drugie wystąpienie tego (upewnij się, że wyszukujesz od początku pliku)
i zamień na
Krok 4: Zapisz plik dll, a następnie otwórz Excel> VBA Editor> Narzędzia> Opcje> Format edytora i ustaw kolory kodu.
Zmiana obu ciągów jest zbędna, ponieważ pozwala na prawidłowe zapisanie kolorów podczas zamykania i pozwala na otwarcie edytora kolorów bez awarii programu Excel.
Dziękujemy wszystkim poprzednim użytkownikom za poświęcenie czasu na zrozumienie tego!
źródło
Stworzyłem program, który automatyzuje to wszystko, spędziłem na nim zdecydowanie za dużo czasu, dobrze się bawiłem, tworząc próbnik kolorów. Wykonane w VB6, ponieważ dlaczego nie. Skompilowany program i kod źródłowy dostępne tutaj . Testowane tylko na moich wersjach bibliotek DLL i VB6, przed zmianą wykonaj kopie zapasowe - lokalizacje są ustalone w kodzie.
To bardzo stare pytanie, ale chciałbym rozważyć jego kompletność
W przypadku kolorów VS2012 w VBA lub VB6 IDE: Otwórz VBE6.DLL / VBE7.DLL lub VBA6.DLL w
za pomocą edytora szesnastkowego
Zamień pierwsze wystąpienie
Z
Następnie wróć na górę i zastąp drugie wystąpienie
z
Następnie zmodyfikuj następujące elementy w rejestrze
Jeśli modyfikujesz VBA, gotowe, w VB6 otwórz teraz „VB6.exe” w edytorze Hex i zmodyfikuj pierwsze wystąpienie
z
To koryguje kolor wyświetlany w interfejsie VB6, więc jeśli chcesz wprowadzić inne zmiany kolorów, możesz to zrobić.
Dziękuję wszystkim pozostałym odpowiedziom, sam tego nie wymyśliłem, tylko pomyślałem, że warto mieć wszystkie informacje wymagane w jednym poście (nigdzie nie widziałem modyfikacji VB6.exe i VBA6.dll razem). Korzystając z tej metody powinieneś być w stanie swobodnie wybierać spośród dostępnych kolorów.
Zmieniłem także kolory niektórych innych odpowiedzi, więc nie zmieniaj vbRed, vbBlue, vbWhite itp., Więc powinieneś otrzymać pożądany wynik w kodzie. Nie zostało to w pełni przetestowane, więc zawsze modyfikuj programy na własne ryzyko.
Byłoby miło skompletować mały program, który zrobi to za ciebie (tak jak zrobił to gallaux), miałem problemy z pisaniem do rejestru i VB6 IDE za pomocą tego programu, i przydałby się rodzaj okna podglądu.
Ograniczenia, które znalazłem: nie zmienia to koloru ikon wskaźników, musisz to zrobić sam.
źródło
Biorąc przynętę z odpowiedzi dnissleya (gdzie pyta, czy ktoś mógłby zrobić dodatek), stworzyłem dodatek do VB6. Jest trochę prymitywny (a wkrótce wyjaśnię dlaczego), ale spełnia swoje zadanie.
W VB6 utworzyłem nowy projekt dodatku, który dał mi domyślny formularz „frmAddin” (którego nie używam) i projektanta „Connect”. Sam dodałem klasę kolorów, która zawiera:
A następnie zmieniłem kod w Projektancie „Połącz” w następujący sposób:
Ten kod pozwala aplikacji na odczyt żądanych kolorów z pliku, który znajduje się w tym samym katalogu co .dll (o nazwie VB6CodeColours.dat). Ten plik zawiera następujące elementy (będą się różnić w zależności od kolorów, które zamienisz w VB6.EXE, więc proste kopiowanie i wklejanie prawdopodobnie nie będzie działać).
Wygląda bełkotliwie, ale wyjaśnię. Ma format „Kolor kodu”, „Pierwszy plan”, „Tło”, Wskaźnik ”, więc górny wiersz ustawi„ Normalny tekst ”na 14. pozycję w zestawie dla pierwszego planu, 12. na tło i 1. na wskaźnik .
Dlaczego powiedziałem, że jest to dość prymitywne rozwiązanie: * Używa SendKeys. Jestem pewien, że nie jest potrzebne żadne dodatkowe wyjaśnienie :) * Użytkownik musi kliknąć opcję menu / paska narzędzi, aby zadziałało. * Kod nie jest najlepiej ustrukturyzowany (moim zdaniem), ale opierał się na ilości czasu, jaki mogłem w tym czasie poświęcić. Staram się go poprawić w przyszłości, ale w obecnym stanie działa dla mnie dobrze (więc prawdopodobnie go zostawię!)
Być może na podstawie ktoś może dalej to rozwinąć.
źródło
Oto sztuczka, jak zachować stały wybór kolorów. Trochę więcej edycji szesnastkowej. Jeśli dokonałeś wymiany sugerowanej przez Bonda , powinieneś mieć pod ręką: wartości RGBA dla podstawowych (klasycznych) 16 kolorów indeksowanych od 0 do 15 oraz wartości RGBA dla kolorów niestandardowych indeksowanych w ten sam sposób. Teraz wyszukaj w VBEx.DLL sekwencję bajtów zbudowaną z „klasycznych” wartości RGBA uporządkowanych w następującej sekwencji indeksów: 15, 7, 8, 0, 12, 4, 14, 6, 10, 2, 11, 3, 9, 1 , 13, 5 (tj. Biały, szary, ciemnoszary, czarny, czerwony, ciemnoczerwony itp.). Wzorzec nieprzypadkowy, pochodzi od wartości przechowywanych w rejestrze, patrz post Tex Hex. Szesnastkowy ciąg wyszukiwania powinien wyglądać jak „FFFFFF00C0C0C0008080800000000000FF000000 ...” itd. Łącznie 64 bajty. Zamień znalezioną sekwencję bajtów na wartości RGBA kolorów „niestandardowych” uporządkowanych w ten sam sposób, np. 15, 7, 8 itd. Teraz wszystkie kolory wybrane w VS UI zostaną zapisane w rejestrze i zastosowane po ponownym uruchomieniu aplikacji. Cóż, wszystkie oprócz kolorów „wskaźnikowych”. Te zawsze resetują się do wartości domyślnych. Uwagi:
Dzięki Tex Hex i Bond za wstępne badania.
UPD: Przetestowano za pomocą MSO2007 (VBE6.DLL) i MSO2013 (VBE7.DLL). Pracuj jak urok.
źródło
Rozwiązanie Bonda (edycja tabeli kolorów w VB6.exe) działa idealnie do modyfikowania tabeli kolorów w IDE VB6. Stwierdziłem jednak, że po wybraniu zmodyfikowanego koloru i zamknięciu VB6, VB6 nie jest w stanie poprawnie zapisać zmodyfikowanego koloru w rejestrze.
Zwykle VB6 zapisuje indeks w 16-wartościowej tabeli kolorów dla każdego elementu tekstowego, którego kolor można zmodyfikować.
Wskaźniki kolorów są zapisywane w rejestrze tutaj:
Na przykład wartość CodeForeColors będzie wyglądać mniej więcej tak:
Wartości od 1 do 16 reprezentują kolor w tabeli kolorów, a 0 oznacza „Auto”.
Jednak po wybraniu zmodyfikowanego koloru VB6 zapisze w rejestrze liczbę spoza zakresu indeksu, a wartość CodeForeColors będzie wyglądać mniej więcej tak:
Przy następnym uruchomieniu VB6 nie będzie w stanie ustawić poprawnego koloru dla elementu, który został ustawiony na zmodyfikowany kolor.
Wciąż próbuję znaleźć rozwiązanie, ale chciałem opublikować to, co do tej pory znalazłem.
źródło