Microsoft Access 掲示板

変数で色の指定をしたい

5 コメント
views
4 フォロー

レポートのフォーマット時で特定の商品だけ色を変えたいのですがうまくいきません
テーブルに商品コードと色を入れてあります
Dim STR as String
STR = Dlookup("ForeColor","***","商品コード = '" & Me.商品コード & "'")
Me.商品名.ForeColor = STR    (STRの中身はvbRed)
これでは型が一致しませんとなってしまいます。

RGBでは指定できるようなのですが一見何色かわからないのでColorContantsを使いたいのですが可能でしょうか
ご存じのかたご教授いただければ助かります。 よろしくお願いします

エピ
作成: 2023/10/13 (金) 14:45:42
通報 ...
2

「ForeColor」フィールドのデータ型がテキスト型で、vbRed という文字が格納されているということですか。

VBAのコードでvbRedは定義済み定数で、中身は数値です。文字ではありませんので、そのエラーになります。

イミディエイトウィンドウで
?vbRed
と入力してEnterキーを押すと
255
と表示されます。この255がvbRedの中身です。

「ForeColor」フィールドのデータ型は数値型にして、赤にしたいなら255を入力してください。

定数の中身は上で説明したようにイミディエイトウィンドウで確認できます。

?vbRed
 255 

?vbGreen
 65280 

?vbYellow
 65535 

?vbBlue
 16711680 

RGBでは指定できるようなのですが一見何色かわからないのでColorContantsを使いたいのですが可能でしょうか

下記のようなテーブルを作成しておいて、それを参照するようにするといいでしょう。

ColorTbl

ColorNameColorNumber
Red255
vbGreen65280
vbYellow65535
vbBlue16711680
3
エピ 2023/10/13 (金) 17:16:07 7d642@0163f

ありがとうございます。

番号でやってみます。

4
hiroton 2023/10/13 (金) 17:46:43 7e920@f966d

適当にできるだろうと思ってやったら痛い目を見ました
それこそデータベース化したらいいじゃないかということではありますが一応

Dim STR as String
STR = Dlookup("ForeColor","***","商品コード = '" & Me.商品コード & "'")
With CreateObject("MSScriptControl.ScriptControl")
  .Language = "VBScript"
  Me.商品名.ForeColor = .Eval(STR)
End With

※この掲示板ではEvalを半角で記述できないので、上記コードでは全角で記述しています


単にEval(str)で実行できればよかったのですがACCESS(2013)では許されないようです
無理やりどうにかする方法を見つけましたが完全に非推奨な方法です
動作原理からしても、やはりカラーコード対応テーブルで対応すべきとなります

5

ColorContantsで定義されているものだけなら、変換関数を自作してもいいかも。

標準モジュール

Public Function GetColorNumber(ColorName As String) As Long
    Select Case ColorName
    Case "Black":   GetColorNumber = vbBlack
    Case "Red":     GetColorNumber = vbRed
    Case "Green":   GetColorNumber = vbGreen
    Case "Yellow":  GetColorNumber = vbYellow
    Case "Blue":    GetColorNumber = vbBlue
    Case "Magenta": GetColorNumber = vbMagenta
    Case "Cyan":    GetColorNumber = vbCyan
    Case "White":   GetColorNumber = vbWhite
    Case Else:      GetColorNumber = -1
    End Select
End Function
Dim STR as String
STR = Dlookup("ForeColor","***","商品コード = '" & Me.商品コード & "'")
Me.商品名.ForeColor = GetColorNumber(STR)