VBA ユーザーフォームの色をオシャレにする
こんにちは。
派犬事務員のコロ子です。
美的センスに全く自信がありません・・・。
上司:「あのさ、コロ子の作るフォームって、なんかダサいんだよね」
コロ子:「・・・ダサい、と言いますと・・・」
上司:「いつも色とかグレーっぽくてイケてないんだよね」
ええっー!フォームの色って気にするところ!?
ってゆーか、そーゆうものじゃないの??
上司:「もうちょっとオシャレな感じにならない?」
・・・。
でもよく「人は見かけが9割」とか聞くし(心が痛い)やっぱ見た目って大切なのね・・・。そもそもユーザーフォームの色って変えられるのかな?
ユーザーフォームの色を変える
ユーザーフォームのプロパティを見てみると、色は変更できそう。
でも、選べる色が少ない。
もっといろいろな色を選びたい場合はVBAで色指定できる。
'フォームの背景色を指定 UserForm1.BackColor = RGB(0, 0, 0) 'テキストボックスの背景色を指定 UserForm1.TextBox1.BackColor = RGB(0, 0, 0) 'テキストボックスの文字色を指定 UserForm1.TextBox1.ForeColor = RGB(0, 0, 0) 'コンボボックスの背景色を指定 UserForm1.ComboBox1.BackColor = RGB(0, 0, 0) 'コンボボックスの文字色を指定 UserForm1.ComboBox1.ForeColor = RGB(0, 0, 0) 'コマンドボタンの背景色を指定 UserForm1.CommandButton1 = RGB(0, 0, 0) 'コマンドボタンの文字色を指定 UserForm1.CommandButton1 = RGB(0, 0, 0)
これなら思い通りの色にできるぞ!
と意気込んだところで、そもそもの色のセンスが悪いので配色がおかしい。
やればやるほどダサくなる。
色にも迷走、疲弊したところにこれにたどり着いた。
デザイン本。オシャレな配色のパターンがいっぱい載ってる!
最初からこーゆーの見れば良かったなー。これならオシャレなフォームが作れる!
しかし、世の中そんなに甘くない。いっぱいありすぎて選べない。
フォームにふさわしい配色が分からない。
それでも自分で配色するより100倍マシなので、これと思うものをチョイス。
早速、こんなユーザーフォームで試してみる。
コロ子がチョイスしたのは、カーキ、茶色、オレンジ、黒。
UserForm1.BackColor = RGB(0, 0, 0)
と直接RGB値を指定すると、色々試している間にどの色を指定しているか分からなくなってしまう。思考錯誤用に指定の色のRGB値を戻すモジュールを作成する。
【色モジュール】標準モジュール
Function カーキ() As Long Dim R As Long Dim G As Long Dim B As Long R = 237 G = 186 B = 98 カーキ = R + G * 256 + B * 256 * 256 End Function Function オレンジ() As Long Dim R As Long Dim G As Long Dim B As Long R = 221 G = 115 B = 41 オレンジ = R + G * 256 + B * 256 * 256 End Function Function 茶色() As Long Dim R As Long Dim G As Long Dim B As Long R = 118 G = 85 B = 52 茶色 = R + G * 256 + B * 256 * 256 End Function Function 黒() As Long Dim R As Long Dim G As Long Dim B As Long R = 0 G = 0 B = 0 黒 = R + G * 256 + B * 256 * 256 End Function
RGB値は
赤の数値 + 緑の数値×256 + 青の数値×256×256
で計算できる。
上記の色を使ってフォームの色を変更する。
【シート1モジュール】
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Load UserForm1 With UserForm1 With .TextBox1 .BackColor = 色.黒 .ForeColor = 色.カーキ End With With .ComboBox1 .BackColor = 色.黒 .ForeColor = 色.カーキ End With With .CommandButton1 .BackColor = 色.黒 .ForeColor = 色.カーキ End With .BackColor = 色.茶色 .Show End With End Sub
こんな感じになった。
ちょっと良く分からないので、いろいろ作って比較してみよう。
ユーザーフォームをコピーする
①UserForm1を選択して、Ctl+A(全て選択)、Ctr+C(コピー)
②新規にユーザーフォームを挿入してフォーム上でCtr+V(ペースト)
この方法でもコピーできるけど、フォームのサイズや、各コントロールのマクロはコピーされないので、次の方法がおススメ。
①ユーザーフォームをエクスポートする。
(フォームの場合はドラッグ&ドロップはできない。)
・UserForm1.frm
・UserForm1.frx
の2つのファイルが作成される。
②元のユーザーフォームの名前を変更する
UserForm1 → UserForm2 へ変更
③ ①で作成したUserForm1.frmをインポートする。
ユーザーフォームを比較する
ユーザーフォームをコピーできたので3っつくらい作って比較してみる。
【シート1モジュール】
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Load UserForm1 With UserForm1 With .TextBox1 .BackColor = 色.黒 .ForeColor = 色.カーキ End With With .ComboBox1 .BackColor = 色.黒 .ForeColor = 色.カーキ End With With .CommandButton1 .BackColor = 色.黒 .ForeColor = 色.カーキ End With .BackColor = 色.茶色 .StartUpPosition = 0 .Top = 200 .Left = 100 .Show vbModeless End With '****************************************************** Load UserForm2 With UserForm2 With .TextBox1 .BackColor = 色.カーキ .ForeColor = 色.黒 End With With .ComboBox1 .BackColor = 色.カーキ .ForeColor = 色.黒 End With With .CommandButton1 .BackColor = 色.カーキ .ForeColor = 色.黒 End With .BackColor = 色.オレンジ .StartUpPosition = 0 .Top = 200 .Left = 400 .Show vbModeless End With '****************************************************** Load UserForm3 With UserForm3 With .TextBox1 .BackColor = 色.茶色 .ForeColor = 色.オレンジ End With With .ComboBox1 .BackColor = 色.茶色 .ForeColor = 色.オレンジ End With With .CommandButton1 .BackColor = 色.茶色 .ForeColor = 色.オレンジ End With .BackColor = 色.カーキ .StartUpPosition = 0 .Top = 200 .Left = 700 .Show vbModeless End With End Sub
ポイント①
3つのフォームを並べて比較したいので、モードレスで表示する。
オブジェクト.Show vbModeless
モードレスにしないと表示されているフォームを閉じないと次のフォームが表示されないので並べて比較できない。
ポイント②
並べて表示させるために、位置指定をする
.StartUpPosition = フォームを最初に表示する時の位置(0は指定なし)
.Top = フォームの上端の位置
.Left = フォームの左端の位置
3つ並べて表示して比較してみる。
えっ!
どれもイマイチですって!!!
やっぱり付け焼き刃じゃダメかぁ~。
おススメのユーザーフォームの配色があったら教えてください!