ACCESS リストボックスの字の色を変えたい

いつもお世話になっております。
クエリをもとにした、リストボックスがあります。
クエリ:店舗ID、店舗名、閉店fg
閉店fgは、yes/no型で、この閉店fgがyesの場合、リストの店舗名の字を赤色にしたいのですが、可能でしょうか?教えて下さい。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

リストボックス及びコンボボックスは、ひとつのオブジェクト項目です


色設定や文字サイズなどは、オブジェクト項目単位に設定する物なので
中の条件に対し色を変えるという仕組みはできません(と思ってます)

どうしてもやりたいのであれば、
リストボックスに近い帳票フォームを使って(サブフォーム化)やっていく
ほかありません。
    • good
    • 0
この回答へのお礼

おはようございます。
やはりリストボックス上では出来ないのですね。
サブフォームで同じようなものを作りたいと思います。
回答ありがとうございました。

お礼日時:2010/09/01 09:27

リストボックス上で色分けでなくて


リストボックスで選んだものを別のテキスト項目にも表示して
そこで色分けをする。
    • good
    • 0
この回答へのお礼

おはようございます。
やはりリストボックス上では、出来ないのですね。
回答ありがとうございました。

お礼日時:2010/09/01 09:31

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVB6,リストボックスの特定行の色変更は可能?

リストボックスに複数行テキストが登録されているときに、特定の行の背景色を変更することは可能でしょうか?
リストボックスのプロパティ等をいろいろ探してみたのですがそれらしきものは見つかりません。
サブクラス化というやつをすればできるのでしょうか?
よろしくお願いします。

Aベストアンサー

これは「オーナードロー」というテクニックになります。

例えばListBoxの描画をVBでは意識する必要がありませんが(マウスで選択するとハイライトしたり、ウインドウを再表示した時に再描画してくれたり等)、これはOSが勝手にやってくれるからなのです。
「オーナードロー」とは、このOSがやってくれる作業を自分で行う、ということになります。
自分で行えば背景色の変更も、前景色の変更も可能になります。
背景にビットマップを描画することも可能です。

>サブクラス化というやつをすればできるのでしょうか?

オーナードローをVB6で実現するには、サブクラス化が必須になります。
オーナードローのコントロールからWM_DRAWITEMというメッセージが送られてくるので、それを処理しなければいけないからです。
ただ、VB6標準のListBoxには「オーナードローを許可する」ListBoxというのがありません。
具体的に言うと
LBS_OWNERDRAWFIXED:(デフォルト)普通のListBox
LBS_OWNERDRAWVARIABLE:オーナードローが有効なListBox
という2つのウインドウスタイルがありますが、VB6標準のListBoxはLBS_OWNERDRAWFIXED固定になっています。

これを変える事は難しいので、CreateWindowEx()API関数を使って「一から(LBS_OWNERDRAWVARIABLEを有効にした)ListBoxを作成する」という作業が必要になります。
そのうえで、サブクラス化を行い、ウインドウプロシージャでWM_DRAWITEMを捕まえて、描画を行います。

しかも、描画にしてもVC++などでウインドウ描画(ブラシなど)の知識があればその辺は何とかなると思いますが、やったことが無いとかなり大変です。
なにせ、OSがやってくれたことを全部(に近い状態で)行わなくてはいけないのですから。

もしサブクラス化の知識もおありでないようでしたら、潔くListBoxを使うのはあきらめたほうがいいかもしれませんね(^^;
一応、参考になりそうなサイトを挙げておきます。

<<ボタンのオーナードロー>>
http://www5.ocn.ne.jp/~minute/article/vb/a2.html
このケースではCommandButtonですが、考え方は一緒です。
<<サブクラス化>>
http://www.galliver.co.jp/writing/susume_vb/tre908/
ListBoxそのものではありませんが(MS提供のユーザーコントロールを使う)、参考になるサンプルとその情報があります。

いちばん簡単なのは、多少運用は面倒ですがListBoxの代わりにTreeViewなどを使う方法ですね。
時間があればListBoxでチャレンジしても構いませんが、サブクラス化一つとってもそれなりの知識が必要ですので、段階を踏んで知識を積み上げていくことをオススメします。

これは「オーナードロー」というテクニックになります。

例えばListBoxの描画をVBでは意識する必要がありませんが(マウスで選択するとハイライトしたり、ウインドウを再表示した時に再描画してくれたり等)、これはOSが勝手にやってくれるからなのです。
「オーナードロー」とは、このOSがやってくれる作業を自分で行う、ということになります。
自分で行えば背景色の変更も、前景色の変更も可能になります。
背景にビットマップを描画することも可能です。

>サブクラス化というやつをすればできるのでし...続きを読む

Qリストボックスの特定行の背景色

いつもお世話になっております。

VB6を使っています。
リストボックスの特定の行の背景色を変えたいのですが、
何か方法はあるのでしょうか?

どうかよろしくお願いいたします。

Aベストアンサー

過去に同様の質問がありました。ご参照下さい。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=1637047

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QACCESSで条件によってフォーム上のフィールドの色を変更

一覧形式のフォームがあり、条件によって色を変更したいのですが、その条件というのが下記のような感じです。

フィールドA | フィールドB | フィールドC | チェックボックス
チェックボックスのチェックがあったら、フィールドA・B・Cの色をグレーにする。
チェックがなかったら白いまま。

というものです。
条件付書式だと、色を変更するフィールドそのもののデータを参照にしないといけないんですよね?
フォームオープンのところにVBAをかいてみたんですが、ひとつひとつは認識してないみたいで…。
どのようにすればいいのでしょうか?

よろしくお願いします。

Aベストアンサー

フォームのデザイン画面で3つのフィールドすべて選択し条件付書式画面を表示させる。
条件1のコンボで”式”を選択。
右側の欄に[チェックボックスのコントロール名]=True
と入力し、バケツアイコンでグレーを選択。
(もちろん1フィールドづつ設定してもOK)

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。

Q【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには

バージョン:Access2002

フォーム「frm01」にテキストボックス「tb01」が作ってある場合、
Forms.frm01.tb01.Value="あいう"
とすれば、フォームもコントロールも指定できるのですが、
Dim strTxt As String
strTxt = "tb01"
Forms.frm01.strTxt.Value="あいう"
だと、文字列型変数"strTxt"が展開されないのでフォーム「frm01」のコントロール「strTxt」を探してしまいエラーになってしまいます。

文字列型変数でフォームやコントロールを指定するには、どのようにすればよいのでしょうか?

Aベストアンサー

フォームの場合
 Forms(strFrm)

フォームのコントロールの場合
 Forms(strFrm).Controls(strTxt)


これでも参照できますが、普通ここまで省略しませんね。
 Forms(strFrm)(strTxt)

あとで見たとき、訳がわからなくなりそう。

Qアクセエスのレコードの更新をVBAでするには?

アクセスで、一覧表のフォームにボタンを取りつけています。レコードの内容を変更したら、ペンの形のマークが現れますね。これは変更中ということですが、そこでボタンを押しても変更は確定されないから、更新確定させたいのです。

それで、DoCmd.Requery を最初の行に入れてみたら、元の一覧表は最初のレコードに飛んでしまう。

元の一覧表の位置を動かさないために、Ctrl+Enter キーを押して更新確定させたような状態をVBAで実現する方法あるのでしょうか?

よろしくお願いします。

Aベストアンサー

No1 です。
今回の場合には
Docmd.RunCommand acCmdSaveRecord の方が良かったですね
文字通りレコードを保存します。
Requery に引きづられてしまいました (^_^;)

Recalc、Refresh、Requery の使い分けは下記が参考にはなりますか?
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

Qフォームを開くときに、コンボボックスの値を選択(アクセスVBA)

こんにちは。
アクセスVBAで、フォームを開いたとき
(フォームのOpenイベント)に、
コンボボックスの値を選択したいのですが、
どういう方法が、あるでしょうか。

理想は、
フォームのOpenないし、Loadイベント内で、
コンボ0.ItemData(2).Selected
と、書くような感じです。
(無論、Selectedは使えませんでした)。

よろしくお願いします。

Aベストアンサー

これでいいのかな?
※テキスト書きなので検証していません

If コンボ0.ListCount > 0 Then
  コンボ0.Value = コンボ0.Column(0, 2)
End If

Q条件に応じてコンボボックスの背景色を変えたいです

4つのコンボボックスA,B,C,Dがあり
A+B=C+D の時、4つのコンボボックスの背景色を変更したいです。

ただしA,Bの両方に何も入力されてない時は色は変更したくないです。


振替管理表というものを作っているのですが、休日出勤した日(A、B)と、振替に休んだ日(C,D)を監理したいです。

休出した日を振替消化した場合にコンボボックスの色を変更して、消化できたことがわかりやすくしたいです。

コンボボックスの値(振替の単位)は1(1日)と0.5(半日)があり、0.5が2つある時には1日として消化したいです。


VBAは修正した事はあるのですが、新規に作るということをした経験がなく困っています。

簡単なサンプルコードが欲しいですが、
参考になるページを紹介していただくだけでも良いのでよろしくお願いしますm(_ _)m

Aベストアンサー

こんにちわ
コンボボックスなんですよね。
オートフィルタではないんですよね。
管理表と仰るので、なぜ、わざわざコンボボックスにしているのか疑問に思いました。

Visual Basic Editor は開けるものとしまして
左欄の該当シート(コンボボックスのあるシート)を選択します。
ツールバーの下にWorkSheetと書かれているところをクリックすると
ComboBox1とか出てきますので選択します。
すぐ下の欄が
Private Sub ComboBox1_Change()
End Sub
となりますので、
Private Sub ComboBox1_Change()
Call Module1.コンボ色々
End Sub
とします。

次に[挿入]-[標準モジュール]を選択すると
先ほど書いていた欄が真っ白になります。
ココに
Sub コンボ色々()
If ActiveSheet.ComboBox1.Value > 0 Then
'コンボボックスの値が0より大きかったら
ActiveSheet.ComboBox1.BackColor = RGB(255, 0, 0)
'赤にします
Else
ActiveSheet.ComboBox1.BackColor = RGB(255, 255, 255)
'白にします
End If
End Sub
といれます。
あとはアレンジしてください

こんにちわ
コンボボックスなんですよね。
オートフィルタではないんですよね。
管理表と仰るので、なぜ、わざわざコンボボックスにしているのか疑問に思いました。

Visual Basic Editor は開けるものとしまして
左欄の該当シート(コンボボックスのあるシート)を選択します。
ツールバーの下にWorkSheetと書かれているところをクリックすると
ComboBox1とか出てきますので選択します。
すぐ下の欄が
Private Sub ComboBox1_Change()
End Sub
となりますので、
Private Sub ComboBox1_Change()
...続きを読む

QACCESSで、フォームのレコードごとに背景色変更

OS:Windows XP
Access Version: ACCESS 2000
ACCESSを利用して一日の時間外を計算するフォームを作成しています。
>   16 金 4:00
> 17 土 3:00
> 18 日 2:00
>  というような感じで時間を入力するのですが、曜日に特徴をつけて誤った入力をしないように、曜日が日曜日の時だけそのレコードの背景色を変更したいのです。よく、レポートで背景色を交互に変更するというやりかたをみてそれを行う方法はわかるのですが、それとおなじよなことをフォームでしたいのです。どうかお願いします!!ちなみにVBAはある程度わかりますのでVBAを利用した方法でもかまいません。

Aベストアンサー

帳票形式の場合ですが(多分データシートビューのフォームでも行けるとは思いますが)・・・
例えばですが、次のようにしてやると、できます。


(1)フォームヘッダー(もしくは詳細セクション)に、「txtID」という名前の
非連結テキストボックスを配置。「可視」プロパティは「いいえ」。
これには、真のIDフィールド(例えば連番フィールドや主キーフィールド)の値を
レコード移動時に転記します。(言わばダミーのテキストボックス)

(2)フォームのレコード移動時のイベントプロシージャを下記の様に
記述します。
サブフォームでやりたいなら、サブフォームのレコード移動時イベントに
記述します。

Private Sub Form_Current()

'真のIDフィールドの値を[txtId]へ代入。
  Me!txtID = Me!真のIDフィールドの名前(例えば連番フィールドや主キーフィールドと連結したテキストボックスの名前)

End Sub



(3)詳細セクション上にある、色変えしたいすべてのテキストボックスを一括選択して、
[書式][条件付き書式]で、条件付の書式設定をします。

条件(1)で、まず ドロップダウンリストから 「 式 」を選び、
その右の条件内容を

[txtID]=[フォームに配置した真のIDフィールドの名前(連結テキストボックス名)]

とします。

そして、背景色を白や透明以外に設定します。

以上

ダミーの非連結テキストボックスは、詳細セクションに置いてもOKですが、
その場合、速度を多少でもアップさせたいならフォームヘッダーに
配置する方がいいのかもしれません。(あんましかわらないかもしれないが)

※※
なお、もし選択した行だけを色変えしたい条件も同時に設定する場合は
カレントレコード色変えの条件を後に(条件(2)に)設定します。

【例】
条件(1)・・・「 式 」、[選択状態]=[選択フラグ] ←選択行だけを色変えする条件
条件(2)・・・「 式 」、[txtID]=[連番]


ただし、あまり色がつく行が増えると、フォームの
動作が遅くなるかもしれません。


お望みの機能でなかったらごめんなさい。

帳票形式の場合ですが(多分データシートビューのフォームでも行けるとは思いますが)・・・
例えばですが、次のようにしてやると、できます。


(1)フォームヘッダー(もしくは詳細セクション)に、「txtID」という名前の
非連結テキストボックスを配置。「可視」プロパティは「いいえ」。
これには、真のIDフィールド(例えば連番フィールドや主キーフィールド)の値を
レコード移動時に転記します。(言わばダミーのテキストボックス)

(2)フォームのレコード移動時のイベントプロシージャを下...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報