私はExcelとVBAを使用するいくつかのプロジェクトに取り組んでいるので、Microsoft Visual Basicエディターを使用せざるを得ません。通常は気にしませんが、エディターのカスタム色を設定する方法がわかりません(デフォルトのパレットからしか選択できません)。
現在色を変更するには、Tools -> Options -> Editor Format
...ただし、選択できるのはデフォルト(および基本)16色のみです。基本と言うとき、ピンク、青、黒、白などのbasicを意味します。 ..
カスタム色を指定する方法、または少なくとも、デフォルトのパレットに表示される色の一部を変更する方法を知っている人はいますか?
VBAは、次のレジストリキーから色の設定を読み取ります。
HKEY_CURRENT_USER\Software\Microsoft\VBA\6.0\Common\CodeForeColors HKEY_CURRENT_USER\Software\Microsoft\VBA\6.0\Common\CodeBackColors
これらの各キーには、[ツール]-> [オプション]-> [エディタ形式]内の各エントリの値のリスト(スペースで区切られた)が含まれています。たとえば、CodeBackColors内の最初の値は背景色であり、CodeForeColors内の最初の値は通常のテキストの前景色です。値は色の内部IDで、0は自動カラーリングを意味し、11はシアン、5レッドなどを示します。
試してみるには、Excelを閉じ、CodeBackColorsの最初の値を5に変更して、Excelを再起動します。コードエディタの背景が赤になります。
問題は、VBAエディターがこれらの内部値のみをサポートし、理解できる最大数が16であることです。他の値は受け入れられず、デフォルトでAUTOに戻ります。
さまざまな値を入力するいくつかのオプション(128255128、16777215、#aaffee、255、または「170,255,238」など)を試しましたが、どれも機能しませんでした。
したがって、他の色を割り当てることは技術的に不可能だと思います。
ここにある情報に基づいてアプリケーションを作成しました: https://github.com/dimitropoulos/VBECustomColors
基本的にVBE6/VBE7 .dllファイルをバックアップし、16進エディターを使用せずにカスタムカラーを使用できます。
ここからダウンロードできます: https://github.com/gallaux/VBEThemeColorEditor
楽しい
編集:ソースコードが利用可能になりました!
TeX HeXが注目されています。ただし、IS 16の組み込み色を独自の色に変更することができます。16進の編集が少し必要です。ステップごとのガイドを示します。(注:これはVB6 SP6、ファイルバージョン6.0.97.82)。
VB98プログラムフォルダー内のVB6.EXEファイルをバックアップします。 (オプション、ただし推奨)。
お気に入りの16進エディタ(HxDに向かって叫ぶ)を起動し、VB6.EXEを開きます。
アドレス0xE22F4にジャンプします。これがカラーテーブルの始まりです。
4つのゼロが表示されます。これはRRGGBBAA形式で黒を表します(アルファはサポートされていないため、実際にはRRGGBB00形式です)。次の4バイトは次の色を指定し、オフセット0xE2333で終わるFFFFFF00(白)に到達するまで続きます。
これらの4バイト値のいずれかを選択して編集します。 RGB形式で適切な16進数値を使用し、その後にゼロバイトを続けます。たとえば、RGB(64、128、192)は40 80 C0 00になります。
変更をEXEに保存し、VB6を起動します。組み込みのVB色で以前占有されていたスロットに新しい色が表示されます。
多くの人が指摘したように、Bondのソリューション(VB6.exeの色テーブルを16進編集)は機能しますが、VB6を起動するたびに、オプションダイアログで色をリセットする必要があります。すべての作業を実行する AutoIt スクリプトを作成しました。必要に応じて編集し、SetSyntaxColoring()へのすべての呼び出しが行われるようにします。
Opt("WinTitleMatchMode", 2)
Opt("MouseClickDelay", 1)
Opt("MouseClickDownDelay", 1)
Opt("MouseClickDragDelay", 1)
Opt("SendKeyDelay", 1)
Opt("SendKeyDownDelay", 1)
Const $NORMALTEXT = 0
Const $SELECTIONTEXT = 1
Const $SYNTAXERRORTEXT = 2
Const $EXECUTIONPOINTTEXT = 3
Const $BREAKPOINTTEXT = 4
Const $COMMENTTEXT = 5
Const $KEYWORDTEXT = 6
Const $IDENTIFIERTEXT = 7
Const $BOOKMARKTEXT = 8
Const $CALLRETURNTEXT = 9
Const $AUTO = 0
Const $BLACK = 1
Const $DARKBLUE = 2
Const $DARKGREEN = 3
Const $DARKRED = 4
Const $DARKBABYBLUE = 5
Const $DARKPINK = 6
Const $DARKYELLOW = 7
Const $LIGHTGRAY = 8
Const $DARKGRAY = 9
Const $BLUE = 10
Const $GREEN = 11
Const $BABYBLUE = 12
Const $RED = 13
Const $PINK = 14
Const $YELLOW = 15
Const $WHITE = 16
If WinExists( "Microsoft Visual Basic" ) Then
WinActivate("Microsoft Visual Basic") ; activates the visual basic window
Send("!+to") ; opens the options menu
Sleep(10)
WinMove("Options", "", 0, 0) ; moves the options menu to the upper left corner of the screen
MouseClick("primary", 100, 50, 1, 0) ; clicks the editor tab
SetSyntaxColoring($NORMALTEXT, $WHITE, $BLACK)
SetSyntaxColoring($SELECTIONTEXT, $AUTO, $AUTO)
SetSyntaxColoring($SYNTAXERRORTEXT, $BLACK, $YELLOW)
SetSyntaxColoring($EXECUTIONPOINTTEXT, $AUTO, $YELLOW)
SetSyntaxColoring($BREAKPOINTTEXT, $WHITE, $DARKRED)
SetSyntaxColoring($COMMENTTEXT, $DARKGREEN, $BLACK)
SetSyntaxColoring($KEYWORDTEXT, $GREEN, $BLACK)
SetSyntaxColoring($IDENTIFIERTEXT, $WHITE, $BLACK)
SetSyntaxColoring($BOOKMARKTEXT, $WHITE, $BLACK)
SetSyntaxColoring($CALLRETURNTEXT, $WHITE, $GREEN)
MouseClick("primary", 210, 340, 1, 0) ; hit the ok button to apply the changes
EndIf
Func SetSyntaxColoring($syntax, $forecolor, $backcolor)
SelectSyntax($syntax)
SelectForecolor($forecolor)
SelectBackcolor($backcolor)
EndFunc
Func SelectSyntax($syntax)
ResetSyntaxList()
RptSend("{DOWN}", $syntax)
EndFunc
Func SelectForecolor($color)
ResetForecolorCbo()
RptSend("{DOWN}", $color)
EndFunc
Func SelectBackcolor($color)
ResetBackcolorCbo()
RptSend("{DOWN}", $color)
EndFunc
Func ResetSyntaxList()
MouseClick("primary", 50, 95, 1, 0)
RptSend("{UP}", 9)
EndFunc
Func ResetForecolorCbo()
MouseClick("primary", 50, 235, 1, 0)
MouseClick("primary", 50, 235, 1, 0)
RptSend("{UP}", 16)
EndFunc
Func ResetBackcolorCbo()
MouseClick("primary", 125, 235, 1, 0)
MouseClick("primary", 125, 235, 1, 0)
RptSend("{UP}", 16)
EndFunc
Func RptSend($text, $rpt)
For $i = 1 To $rpt
Send($text)
Next
EndFunc
私はそれをデスクトップに置いたままにし、vb6を開く必要があるときはいつでも、それをダブルクリックするだけで、構文の色付けが私の制御下にあるように。
編集1:スクリプトを少し最適化して、より速く実行できるようにしました。 VB6.EXEを自動的に編集して色の選択を容易にするプログラムをまとめることを考えています。 VSのプラグインを作成してAutoItスクリプトを破棄する方法はあるのでしょうか。
編集2:16進エディターを使用せずにexeの色を編集できるユーティリティを作成: VbClassicColorEditor 。そのリンクは、bitbucketのパブリックリポジトリに移動します。
以前の回答の要約を投稿したかったのは、Excel VBAエディターで色を変更するために何をする必要があるかが完全に明確ではないためです。
以下の例では、 Solarized の配色を追加しています。Office2010の使用を想定しています。
ステップ0:変更する前にVBE7.dllのバックアップを作成します-警告されました!!!
ステップ1:16進エディタで、@にある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:1stの発生を見つける
_ff ff ff 00 c0 c0 c0 00 80 80 80 00 00 00 00 00
ff 00 00 00 80 00 00 00 ff ff 00 00 80 80 00 00
00 ff 00 00 00 80 00 00 00 ff ff 00 00 80 80 00
00 00 ff 00 00 00 80 00 ff 00 ff 00 80 00 80 00`
_
と置き換える
_00 2b 36 00 07 36 42 00 58 6e 75 00 65 7b 83 00
83 94 96 00 93 a1 a1 00 ee e8 d5 00 fd f6 e3 00
b5 89 00 00 cb 4b 16 00 dc 32 2f 00 d3 36 82 00
6c 71 c4 00 26 8b d2 00 2a a1 98 00 85 99 00 00
_
ステップ3:これの2ndの発生を検索します(から検索ファイルの先頭)
_00 00 00 00 00 00 80 00 00 80 00 00 00 80 80 00
80 00 00 00 80 00 80 00 80 80 00 00 c0 c0 c0 00
80 80 80 00 00 00 ff 00 00 ff 00 00 00 ff ff 00
ff 00 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00
_
と置き換える
_00 2b 36 00 07 36 42 00 58 6e 75 00 65 7b 83 00
83 94 96 00 93 a1 a1 00 ee e8 d5 00 fd f6 e3 00
b5 89 00 00 cb 4b 16 00 dc 32 2f 00 d3 36 82 00
6c 71 c4 00 26 8b d2 00 2a a1 98 00 85 99 00 00
_
ステップ4:dllファイルを保存してから、Excel> VBA Editor> Tools> Options> Editor Formatを開き、コードの色を設定します。
両方の文字列を変更すると、シャットダウン時に色が正しく保存され、Excelがクラッシュすることなくカラーエディターを開くことができるため、必要です。
これを理解するために時間を割いてくれた以前のすべての回答者に感謝します!
私は、これらすべてを自動化するプログラムを作成しました。そのために非常に長い時間を費やし、カラーピッカーを作成するのを楽しんでいました。 VB6で作られた理由。コンパイルされたプログラムとソースコードが利用可能 ここ 。 DLLとVB6の私のバージョンでのみテストされています。変更を行う前にバックアップを作成してください。場所はコードで修正されています。
これは非常に古い質問ですが、完全性を考慮して検討したいと思います
VBAまたはVB6 IDEのVS2012カラーの場合:VBE6.DLL/VBE7.DLLまたはVBA6.DLLを開く
C:\Program Files (x86)\Common Files\Microsoft shared\VBA\
or
C:\Program Files (x86)\VB98\ (Your VB6 install location)
あなたの16進エディタで
の最初の出現を置き換える
ff ff ff 00 c0 c0 c0 00 80 80 80 00 00 00 00 00
ff 00 00 00 80 00 00 00 ff ff 00 00 80 80 00 00
00 ff 00 00 00 80 00 00 00 ff ff 00 00 80 80 00
00 00 ff 00 00 00 80 00 ff 00 ff 00 80 00 80 00
と
ff ff ff 00 1e 1e 1e 00 d4 d4 d4 00 00 00 00 00
ff 00 00 00 26 4f 78 00 ff ff 00 00 d6 9d 85 00
00 ff 00 00 60 8b 4e 00 00 ff ff 00 00 80 80 00
00 00 ff 00 56 9c d6 00 ff 00 ff 00 9f 74 b1 00
次に、先頭に戻って、2回目の出現箇所を置き換えます
00 00 00 00 00 00 80 00 00 80 00 00 00 80 80 00
80 00 00 00 80 00 80 00 80 80 00 00 c0 c0 c0 00
80 80 80 00 00 00 ff 00 00 ff 00 00 00 ff ff 00
ff 00 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00
と
00 00 00 00 56 9c d6 00 60 8b 4e 00 d6 9d 85 00
26 4f 78 00 9f 74 b1 00 d6 9d 85 00 1e 1e 1e 00
d4 d4 d4 00 00 00 ff 00 00 ff 00 00 00 ff ff 00
ff 00 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00
次に、レジストリで以下を変更します
(For VBA)
HKEY_CURRENT_USER\Software\Microsoft\VBA\6.0\Common
HKEY_CURRENT_USER\Software\Microsoft\VBA\7.1\Common
(For VB6)
HKEY_CURRENT_USER\Software\Microsoft\VBA\Microsoft Visual Basic
FontFace = 'Consolas'
CodeForeColors = '8 3 5 4 1 10 14 3 4 4 0 0 0 0 0 0 '
CodeBackColors = '2 6 4 8 10 2 2 2 16 10 11 12 13 14 15 0 '
VBA用に変更している場合は、これで完了です。VB6の場合は、16進数エディターで 'VB6.exe'を開き、最初に出現するものを変更します。
00 00 00 00 00 00 80 00 00 80 00 00 00 80 80 00
80 00 00 00 80 00 80 00 80 80 00 00 c0 c0 c0 00
80 80 80 00 00 00 ff 00 00 ff 00 00 00 ff ff 00
ff 00 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00
と
00 00 00 00 56 9c d6 00 60 8b 4e 00 d6 9d 85 00
26 4f 78 00 9f 74 b1 00 d6 9d 85 00 1e 1e 1e 00
d4 d4 d4 00 00 00 ff 00 00 ff 00 00 00 ff ff 00
ff 00 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00
これにより、VB6のインターフェイスに表示される色が修正され、色に他の変更を加えることができるようになります。
他のすべての回答に感謝しますが、私はこれを思い付きませんでした。単一の投稿に必要なすべての情報を含めることは有用だと思いました(VB6.exeとVBA6.dllを一緒に変更することはどこにもありませんでした)。この方法を使用すると、利用可能な色から自由に選択できるはずです。
また、他のいくつかの回答から色を並べ替えたので、vbRed、vbBlue、vbWhiteなどを変更しないでください。コードで希望どおりの結果が得られるはずです。これは完全にはテストされていないため、常にユーザーのリスクでプログラムを変更してください。
これを実行する小さなプログラム(gallauxのように)をまとめるといいでしょう。レジストリとVB6への書き込みに問題がありましたIDEそのプログラムの使用、およびソートプレビューウィンドウのいいです。
私が見つけた制限:これはインジケーターアイコンの色を変更しません。これは自分で行う必要があります。
ここでは、色の選択を永続的に維持する方法を説明します。もう少し16進編集。 Bond で置き換えを提案した場合、次のものが手元にあるはずです。基本(クラシック)16色のRGBA値は0から15までインデックスされ、カスタム色のRGBA値は同じ方法でインデックスされます。次に、VBEx.DLLを検索して、次のインデックスの順序で並べられた「クラシック」RGBA値から構築されたバイトシーケンスを探します:15、7、8、0、12、4、14、6、10、2、11、3、9、1 、13、5(つまり、白、灰色、濃い灰色、黒、赤、濃い赤など)。パターンはランダムではなく、レジストリに保存された値から導出されます。 Tex Hexの投稿 を参照してください。検索用の16進文字列は「FFFFFF00C0C0C0008080800000000000FF000000 ...」のように表示される必要があります。合計64バイトです。見つかったバイトシーケンスを、同じ方法で並べられた「カスタム」カラーのRGBA値で置き換えます。 15、7、8など。これで、VS UIで選択したすべての色がレジストリに保存され、アプリケーションの再起動後に適用されます。まあ、すべて、「指標」の色を除いて。これらは常にデフォルトにリセットされます。ノート:
UPD:MSO2007(VBE6.DLL)およびMSO2013(VBE7.DLL)でテスト済み。魅力のように働きます。
Bondのソリューション(VB6.exeのカラーテーブルの編集)は、VB6 IDEのカラーテーブルを変更するのに最適です。ただし、変更された色を選択してVB6をシャットダウンすると、VB6は変更された色をレジストリに正しく保存できないことがわかりました。
通常、VB6は、色を変更できる各テキストアイテムの16値のカラーテーブルにインデックスを書き込みます。
カラーインデックスは、次のレジストリに書き込まれます。
HKEY_CURRENT_USER\Software\Microsoft\VBA\Microsoft Visual Basic\CodeForeColors
HKEY_CURRENT_USER\Software\Microsoft\VBA\Microsoft Visual Basic\CodeBackColors
たとえば、CodeForeColors値は次のようになります。
6 14 5 0 1 3 13 4 15 0 0 0 0 0 0 0
1〜16の値はカラーテーブルの色を表し、0は「自動」を意味します。
ただし、変更された色が選択されると、VB6はインデックスの範囲外の数値をレジストリに書き込み、CodeForeColors値は次のようになります。
5245006 14 5 0 1 3 13 4 15 0 0 0 0 0 0 0
次回VB6を起動すると、変更された色に設定されていたアイテムに正しい色を設定できなくなります。
私はまだ解決策を見つけようとしていますが、これまでに見つけたものを投稿したいと思っています。