こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

accessフォームチェックボックス→トルグ文字

(access 2003)
(メインとサブがあり、メインフォームです。)

フォームのチェックボックス(yes/no型)をコントロールの種類変更よりトルグボタンに変更し、
トルグボタンで入力しています。

yesなら、「仮」 noなら「普通」としたいと思い、下記の式を試して見ましたが、下記のようになります。

ページ移動ごとに凸凹は変わるのですが、トルグボタンに表記させている文字が「仮」から変わりません。
ボタンを押した時だけ「普通」に変わるのですが、ページを移動すると今度は「普通」ばかりの表記になってしまいます。

よろしくお願い致します。

Private Sub T2伝票仮_AfterUpdate()
If Me![T2伝票仮].Value = True Then
Me![T2伝票仮].Caption = "仮"
Me![T2伝票仮].ForeColor = 255

Else
Me![T2伝票仮].Caption = "普通"
Me![T2伝票仮].ForeColor = 16711680

End If

End Sub

投稿日時 - 2012-12-20 16:50:41

QNo.7853822

すぐに回答ほしいです

質問者が選んだベストアンサー

前回(?)のご質問の回答者です。
http://okwave.jp/qa/q7850659.html

まず初めに、細かい話になりますが、ご質問のコントロールは「トグル(toggle)」ボタン
ですので、ご確認を・・・(汗)

さて、本題ですが、

> ページ移動ごとに凸凹は変わるのですが、

とのことから、当該フォームの『既定のビュー』が「単票フォーム」になっているものと
推測します。
(ページ移動=レコード移動)

そうであれば、ご質問で掲載しているコードはそのまま使用した上で、トグルボタンを
設置したフォームの『レコード移動時』に下記コードを記述すれば、ご希望の動作に
なるかと思います:

Private Sub Form_Current()

  'レコード移動に合わせて、「T2伝票仮」の更新時と同じ処理を実行
  Call T2伝票仮_AfterUpdate

End Sub


【以下、余談の可能性大(汗)】

もしも当該フォームの『既定のビュー』が「帳票フォーム」になっていて、一度に複数
のレコードが表示される場合は、フォームのコントロールのCaptionプロパティや
ForeColorプロパティは、一度に1つの値しかもてないため、ご希望の動作をさせる
ことはできません。
(トグルボタンは『背景スタイル』プロパティを持たないため、「透明にして、文字列の
 表示用に別途テキストボックスを用意して重ねてしまう」といったこともできません)

この場合は、凹凸表示に文字列を重ねるのは諦めて、使用するコントロールを
『コンボボックス』に変更(→『コントロールの種類の変更』では対応できないので、
既存のトグルボタンを削除&新規コンボボックスを追加(&ラベル削除))し、
『条件付書式』によって「前景色/背景色」を切り替える、といった代替策をとるしか
ないかと思います。
(条件付書式は、今回のご質問のように条件が固定なら、VBAでやるよりもデザイン
 ビューでメニューから設定してしまった方が圧倒的に楽です:
 当該コンボボックスの右クリックメニューから、「条件付き書式(D)」を選択)

※コンボボックスのプロパティは、例えば以下のようにします:
 <『書式』タブ>
  『列数』=「2」、『列幅』=「0cm;3cm」
 <『データ』タブ>
  『コントロールソース』=「T2伝票仮」、『値集合タイプ』=「値リスト」、
  『値集合ソース』=「True; "仮"; False; "普通"」、『連結列』=「1」

または、トグルボタンは「値の更新用」として残した上で、文字列表示にはテキスト
ボックスを使用する(隣に配置)、とする手もあります。
(テキストボックスの『コントロールソース』プロパティには
  =IIF([T2伝票仮], "仮", "普通")
 という式を指定すれば、『T2伝票仮』トグルボタンの更新に連動して文字列が
 変わります:
 先頭に「=」をつけた【演算コントロール】となるため、テキストボックス自体で
 データを編集することはできません)


・・・以上、長くなりましたが、参考まで。

投稿日時 - 2012-12-20 21:56:58

お礼

2度にわたり、恐縮です。
私の中では、まぎれも無くトルグでした・・・。が、トグルでしたか・・・(恥
他の職員に説明する時、トルグと言い、みんながトルグだと信じるとこでした・・・(焦
ご指摘ありがとうございます。

検索しても検索しても、希望どうりの答えが中々見つからず、困っていましたが、
教えていただきました式にて、無事動作しました。

式の後の、補足もとても勉強になります。有難うございます。
accessは2年くらい触っていますが、その都度必要なものを足していく方法で作っていますので、
その都度初めての式を作らないといけないので、悩まされます。
なるべく自分の力で乗り越えたいと思うのですが、中々・・・

長くなりましたが、ありがとうございました。

投稿日時 - 2012-12-21 16:25:52

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

No1、No2です。
かんじんなことを忘れていました。

T2伝票仮

これが何のコントロールかは何も書いてありませんが、
一応、トルグボタンであろうという前提で回答しています。

投稿日時 - 2012-12-20 19:59:07

お礼

ご回答いただき有難うございます。
No.1~3を読ませていただき、こういう方法もあることを知り
とても勉強になります。
説明に不足があるにも関わらず、ご回答頂き有難うございました。

投稿日時 - 2012-12-21 16:15:49

ANo.2

No1です。あるいは、

Private Sub T2伝票仮_AfterUpdate()

を、あっさり

Private Sub cmdCaption()

におきかえて、

Call T2伝票仮_AfterUpdate

を、

Call cmdCaption

にしても同じことではありますが。

投稿日時 - 2012-12-20 19:25:33

お礼

ご回答いただき有難うございます。
No1~3をまとめて、No3にお返事させていただきます。

投稿日時 - 2012-12-21 16:16:25

ANo.1

>ページ移動ごとに凸凹は変わるのですが

ページとは何ですか?ひょっとしてタブコントロールですか?
あるいは、見知らぬコントロールでしょうか?

たとえば、タブコントロールとして、タブコントロールの
名前を、

  タブ0

とします。たとえば、タブコントロールの変更によるイベントなどで、

Private Sub タブ0_Change()
If Me![T2伝票仮].Value = True Then
Me![T2伝票仮].Value = False
Call T2伝票仮_AfterUpdate
Else
Me![T2伝票仮].Value = True
Call T2伝票仮_AfterUpdate
End If

End Sub


のようにして、T2伝票仮_AfterUpdate というプロシージャを、

Call T2伝票仮_AfterUpdat

のように呼び出せばよろしいかと。
なお、上記のプロシージャは適当なものです。
Call T2伝票仮_AfterUpdat
の有効活用についての例なので、実際は
どのようになっているかはわかりませんが。

投稿日時 - 2012-12-20 19:08:51

お礼

ご回答いただき有難うございます。
No1~3をまとめて、No3にお返事させていただきます。

投稿日時 - 2012-12-21 16:16:38

あなたにオススメの質問