お世話になります。
主キー、カラーコード(10進数)を格納したテーブルがあり、それを表示するフォームがあります。 各レコードにそれぞれの列を表示するテキストボックスを置き、その右端に、カラーコードが表す【色】を表示させたいと考えています。
VBAでの条件付き書式なども試してみましたが、イメージしたとおりの結果が得られず、半ば諦めております。 妙案をお持ちの方がいらっしゃれば、ご教授頂けないでしょうか。 よろしくお願いします。
リッチテキスト形式を使うとテキストボックス内の文字に装飾を加えることができます テキストボックスを背面に設置し、空白スペースで埋め尽くして、その文字の背景色としてカラーコードを指定すればイメージしたものができるかもしれません
背面に設置するテキストボックスの設定
コントロールソース|='<div><font style="BACKGROUND-COLOR:#' & Hex([カラーコード]) & '"> </font></div>' 文字書式 |リッチ テキスト形式 背景スタイル |透明 境界線スタイル |透明
表示したいラベルのサイズに合わせてフォントサイズや空白スペースの数を調整してみてください
年末年始の繁忙期のため、お礼が遅くなり申し訳ございません。
以前投稿されていた、詳細_paintイベントを使う方法でうまいこと動いてくれました。 お教え頂いた方に感謝申し上げます。
カラーコードのテキストボックスを txt_ColorCode、 色を表示したいラベルを Lbl_info とします。
Private Sub 詳細_Paint() If Nz(Trim(txt_ColorCode), vbNullString) <> vbNullString Then Me.Lbl_info.BackStyle = 1 Me.Lbl_info.BackColor = txt_ColorCode Else Me.Lbl_info.BackStyle = 0 End If End Sub
これで色を表示させることが出来ました。ありがとうございました。
hiroton様の投稿内容でも試してみましたが、うまく動作しませんでした。 HTMLでのカラーコードはRGBの順ですが、VBAでの10進数のカラーコードをhex関数で16進数に変換すると、 何となくですがBGRの順で出てきます。 VBAは内部的に色をBGRの順で計算しているのでしょうか。 考えていると頭が混乱してきました。
参考画像を貼っておきます。アドバイスを頂いたお二方、本当にありがとうございました。
修正版
コントロールソース|='<font style="BACKGROUND-COLOR:#' & Right("00" & Hex([カラーコード]),2) & Mid(Hex([カラーコード]+16777216),4,2) & Mid(Hex([カラーコード]+16777216),2,2) & '"> </font>'
RGB並び順を修正 HTMLのカラーコード指定は6桁(3桁でもいいけど)必要なので10進数→16進数変換で特定の場合に上位桁がなくなってしまうのを修正 divタグは不要っぽかったので削除
RGBは確かに逆順にしないとダメでした。いい感じの技術資料が見つけられなかったんですが、実装次第で異なる場合もあるようですRGBのHex並びが逆(AddinBox/VBAユーザーの為のOpenOffice.org 備忘録さん) これはもう、VBAではそう、としか言いようがなさそうです
カラーコード表記は例えば「#FF0000」で、最初の#を除いて先頭2文字が1つ目のグループで「R」の量を表す、3~4文字目が・・・ となっていて、「桁」自体は存在しません。これを数値にする場合、「桁」を与える必要があります
数値で同様のことを考えると、1つ目のグループは一の位で2つ目のグループは十の位で・・・と考えることができます。そして、これを文字であらわすときは一番大きいグループから表記します。
一の位が3 十の位が2 百の位が1 ならば3×1+2×10+1×100 → 123
これをRGBに当てはめ、 1つ目のグループ(R)がFF 2つ目のグループ(G)が00 3つ目のグループ(B)が00 ならば、FF×1+00×256+00×256×256 → &H0000FF
このように考えると カラーコード表示のRGB(255,0,0)→#FF0000 16進数表示のRGB(255,0,0)→&H0000FF
のように、文字の並び順だけ見れば逆になるという表現方法も間違いとは言えないことがわかると思います
不適切なコンテンツとして通報するには以下の「送信」ボタンを押して下さい。 現在このグループでは通報を匿名で受け付けていません。 管理者グループにはあなたが誰であるかがわかります。
どのように不適切か説明したい場合、メッセージをご記入下さい。空白のままでも通報は送信されます。
通報履歴 で、あなたの通報と対応時のメッセージを確認できます。
トピックをWIKIWIKIに埋め込む
次のコードをWIKIWIKIのページに埋め込むと最新のコメントがその場に表示されます。
// generating...
プレビュー
Accessのテーブルやクエリのデータを貼り付ける場合は下記で、Markdown書式のテーブルに変換して貼り付けてください。
Markdown Tables generator
ここまでがあなたのコンテンツ
ここからもあなたのコンテンツ
リッチテキスト形式を使うとテキストボックス内の文字に装飾を加えることができます
テキストボックスを背面に設置し、空白スペースで埋め尽くして、その文字の背景色としてカラーコードを指定すればイメージしたものができるかもしれません
背面に設置するテキストボックスの設定
表示したいラベルのサイズに合わせてフォントサイズや空白スペースの数を調整してみてください
年末年始の繁忙期のため、お礼が遅くなり申し訳ございません。
以前投稿されていた、詳細_paintイベントを使う方法でうまいこと動いてくれました。
お教え頂いた方に感謝申し上げます。
カラーコードのテキストボックスを txt_ColorCode、
色を表示したいラベルを Lbl_info とします。
Private Sub 詳細_Paint()
If Nz(Trim(txt_ColorCode), vbNullString) <> vbNullString Then
Me.Lbl_info.BackStyle = 1
Me.Lbl_info.BackColor = txt_ColorCode
Else
Me.Lbl_info.BackStyle = 0
End If
End Sub
これで色を表示させることが出来ました。ありがとうございました。
hiroton様の投稿内容でも試してみましたが、うまく動作しませんでした。
HTMLでのカラーコードはRGBの順ですが、VBAでの10進数のカラーコードをhex関数で16進数に変換すると、
何となくですがBGRの順で出てきます。
VBAは内部的に色をBGRの順で計算しているのでしょうか。
考えていると頭が混乱してきました。
参考画像を貼っておきます。アドバイスを頂いたお二方、本当にありがとうございました。
修正版
RGB並び順を修正
HTMLのカラーコード指定は6桁(3桁でもいいけど)必要なので10進数→16進数変換で特定の場合に上位桁がなくなってしまうのを修正
divタグは不要っぽかったので削除
RGBは確かに逆順にしないとダメでした。いい感じの技術資料が見つけられなかったんですが、実装次第で異なる場合もあるようですRGBのHex並びが逆(AddinBox/VBAユーザーの為のOpenOffice.org 備忘録さん)
これはもう、VBAではそう、としか言いようがなさそうです
カラーコード表記は例えば「#FF0000」で、最初の#を除いて先頭2文字が1つ目のグループで「R」の量を表す、3~4文字目が・・・
となっていて、「桁」自体は存在しません。これを数値にする場合、「桁」を与える必要があります
数値で同様のことを考えると、1つ目のグループは一の位で2つ目のグループは十の位で・・・と考えることができます。そして、これを文字であらわすときは一番大きいグループから表記します。
一の位が3
十の位が2
百の位が1
ならば3×1+2×10+1×100 → 123
これをRGBに当てはめ、
1つ目のグループ(R)がFF
2つ目のグループ(G)が00
3つ目のグループ(B)が00
ならば、FF×1+00×256+00×256×256 → &H0000FF
このように考えると
カラーコード表示のRGB(255,0,0)→#FF0000
16進数表示のRGB(255,0,0)→&H0000FF
のように、文字の並び順だけ見れば逆になるという表現方法も間違いとは言えないことがわかると思います