アクセスフォームチェックボックスのトルグ文字の表記方法について

このQ&Aのポイント
  • アクセスフォームのチェックボックスをトルグボタンに変更する方法を試しています。
  • ボタンを押した時だけ表示が「普通」に変わり、ページを移動すると「普通」の表記になってしまいます。
  • 式の設定に問題があるのか、トルグ文字の表記がうまくいかない状況です。
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.4

前回(?)のご質問の回答者です。 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伝票仮』トグルボタンの更新に連動して文字列が  変わります:  先頭に「=」をつけた【演算コントロール】となるため、テキストボックス自体で  データを編集することはできません) ・・・以上、長くなりましたが、参考まで。

hyolli
質問者

お礼

2度にわたり、恐縮です。 私の中では、まぎれも無くトルグでした・・・。が、トグルでしたか・・・(恥 他の職員に説明する時、トルグと言い、みんながトルグだと信じるとこでした・・・(焦 ご指摘ありがとうございます。 検索しても検索しても、希望どうりの答えが中々見つからず、困っていましたが、 教えていただきました式にて、無事動作しました。 式の後の、補足もとても勉強になります。有難うございます。 accessは2年くらい触っていますが、その都度必要なものを足していく方法で作っていますので、 その都度初めての式を作らないといけないので、悩まされます。 なるべく自分の力で乗り越えたいと思うのですが、中々・・・ 長くなりましたが、ありがとうございました。

その他の回答 (3)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

No1、No2です。 かんじんなことを忘れていました。 T2伝票仮 これが何のコントロールかは何も書いてありませんが、 一応、トルグボタンであろうという前提で回答しています。

hyolli
質問者

お礼

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

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

No1です。あるいは、 Private Sub T2伝票仮_AfterUpdate() を、あっさり Private Sub cmdCaption() におきかえて、 Call T2伝票仮_AfterUpdate を、 Call cmdCaption にしても同じことではありますが。

hyolli
質問者

お礼

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

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.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 の有効活用についての例なので、実際は どのようになっているかはわかりませんが。

hyolli
質問者

お礼

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

関連するQ&A

  • チェックボックスを利用してフォームを開く

    帳票フォームでデータを出している画面の一番左にチェックボックスを配置しました。 第一にチェックボックスを1つづつ選択できるように下記を記載しました。 Private Sub 選択_Click() If Me!選択 Then CurrentDb.Execute "UPDATE テーブル名 SET 選択 = False;" Me.Refresh End If End Sub チェックボックスにチェックを入れると一連のデータが新しいフォームに移る様に 下記のように記載しましたが、全く受け付けません。 Private Sub 編集_Click() If 選択 = False Then DoCmd.OpenForm "編集F" DoCmd.Close acForm, "メインフォーム名" End If 何が問題なのかわかりません。 ご助言いただきたく、宜しくお願い致します。

  • accessフォーム トルグ yes/no表示切替

    access フォームにてトルグボタンでyes/noの表示を切り替える 単票フォームにyes/no型のチェックボックスがあります。 トルグボタンを押すとチェックしたものだけが表示され、ボタンを解除(押さなければ)すると 全件表示されるようにしたいです。 また、この単票フォームを開けた時は、常にボタンが解除されて全件表示の状態にしたいです。 下記の式だと、ボタンを解除してもチェックしたものだけの表示になり全件表示になりません。 よろしくお願いします。 ----------------------------------------- 単票フォーム名:T2伝票 トルグボタン名:トグル38 チェックボックス名:T2伝票仮 ----------------------------------------- Private Sub トグル38_Click() Dim strWhere As String strWhere = "([T2伝票仮] = True)" Me.Filter = strWhere Me.FilterOn = True End Sub

  • チェックボックス選択後、フォームに移して編集したい

    チェックボックスの選択では Private Sub 選択_Click() If Me!選択 Then CurrentDb.Execute "UPDATE 申請履歴Q SET 選択 = False;" Me.Refresh End If End Sub でチェックボックスを1つづつ選択可能にしたのですが、 フォームに移動しようとすると最初の(001)のデータがフォームに 出てきてしまいます。 Private Sub 編集_Click() Dim mode As Variant mode = Me.選択.Value DoCmd.OpenForm FormName:="編集F", DataMode:=acFormEdit うまく選択できていないのは分かるのですが、本を何冊も広げてみても 良い回答に行きつきません。 何卒、ご指導の程宜しくお願い致します。

  • Access 2003 でフォームフィルターがかかりません。

    Access 2003 でフォームフィルターがかかりません。 どなたか助けてください。 アクセス初心者です。 フォームの詳細欄にチェックボックス(フィールド名:伝票チェック)を配置しております。 チェックの入っていないものを表示させたいです。 フォームヘッダーのオプショングループ(フレーム67)に オプションボタン0-オプション値0と オプションボタン2-オプション値2 の2個のオプションボタンを配置してあります。 クリック時のイベントプロシージャに以下のコードを書きました。 Private Sub フレーム67_Click() If Me!フレーム67 = 0 Then Me.Filter = 伝票チェック = 0 Me.FilterOn = True Else Me.Filter = "" Me.FilterOn = True End If End Sub 実行時エラーは出ませんが、データが何も表示されません。 どうすればいいのでしょう??? どなたかお願いします。

  • Accessユーザーフォームでコマンドボタンのcaptionについてで

    Accessユーザーフォームでコマンドボタンのcaptionについてですが Aテーブルを基に表記式でフォームを作成し、コマンドボタンを配置します。 この際、コマンドボタンのcaptionをAテーブルのフィールド値を表示したいのですが 可能でしょうか? フォームを開く際に Private Sub フォーム_Load() Me!コマンド1.Caption = Me![フィールド1] End Sub とイベントを発生させましたが、全てのボタンのCaptionがAテーブル1行目、 フィールド1の値で表示されてしまいます。 Dlookupを使用しても結果か同じでしたので、 フォームをLoadした時のMe![フィールド1]の値がAテーブル1行目の値であり その値でCaptionが設定されていであろうことはなんとなくわかるのですが 何をどうすればいいか行き詰ってしまいました。 どんなやり方があるのかお教えください。

  • チェックボックスについて

    こんにちは。 フォームで「個人別状態」が「成約済み」の時に チェックボックスにチェックがつくようにしたいのですが、 動作しません。 どこが間違っているのでしょうか。。。 Private Sub チェック31_Click() If Me.個人別状態 = "成約済み" Then Me.チェック31.Value = False Else Me.チェック31.Value = True End If End Sub

  • エクセルマクロのテキストボックスの質問です。テキストボックス内の文字を

    エクセルマクロのテキストボックスの質問です。テキストボックス内の文字を24文字13行で設定します。文字を打つことにより残り行数をカウントできるようなマクロを作成したいと思い次のマクロを設定しましたがエラーがでます。対処方法わかりますか。 UserForm1のマクロは次の通りです。 Private Sub CommandButton1_Click() Me.Hide End Sub Private Sub TextBox1_Change() ato = 13 - TextBox1.linecounut Label1.ForeColor = 0 If ato <= 10 Then Label1.ForeColor = RGB(255, 0, 0) Label1.Caption = "あと " & ato & " 文字入力できます。" End Sub すると1回目は入力可能ですが,次のセルに移動するとこのようなメッセージが出てしまいます。 linecountのプロパティーを取得できません。このコントロールはフォーカスを持つ必要があります。setfoucusメソッドによってこのプロパティーまたhメソッドが参照される前にフォーカスに移動しました

  • アクセスのフォームで

    アクセスのフォームで、品番一覧というテーブルを基にした、F品番一覧というフォームがあります。 ヘッダー部に検索するコンボボックスがあり、品番一覧テーブルの品番を参照しています。 検索ボタンを押すと、コンボボックスの内容に当てはまるものが、フォームの詳細部に一覧として表示させる様にしたのですが、品番に"50#1"や"50#2"という#を使い、1と2を分けている物があるのですが、コンボボックスで、この#が付いた物で検索すると検索結果がなにも表示されません。#が付いていない物はちゃんと一覧が表示されます。 #が付いている場合でもちゃんと表示するにはどの様にしたら良いですか?テーブル側の#を取り除く事はできません。 検索ボタンのコードは Private Sub 検索_Click() Dim strFilter As String, strExp As String, aryOpe As Variant If Not IsNull(Me.txt氏名) Then strFilter = strFilter & " AND 品番 Like *" & Me.品番一覧 & "*" End If Me.Filter = Mid(strFilter, 5) If strFilter = "" Then Me.FilterOn = False Else Me.FilterOn = True End If となっています。 うまく説明できなくてすいませんが、誰か教えて頂けませんか? よろしくお願いします。 End Sub

  • Access2003にて、メインフォーム上に設置した「コピー」ボタンを

    Access2003にて、メインフォーム上に設置した「コピー」ボタンをクリックすると、メインフォームとサブフォーム9個のレコードを一括で新規レコードにコピーするVBAを作成しています。 ですが、ボタンをクリックすると、 「3164  フィールドを更新できません」 とメッセージが表示されて、メインとサブ1だけがコピーされ、サブ2~9はコピーされません。 テーブルの構成は以下のようになっています。 メイン(テーブル名:00メイン)  ・計画書番号(オートナンバー型)※主キー  ・コピーフラグ(数値型)  ・コピー実行日(日付型)  ・作成フラグ(数値型)  ・作成日(日付型)  ※この他40程フィールドがあります。 サブ1~9(テーブル名:01~09サブ)  ・計画書番号(長整数型)※インデックスは「はい(重複なし)」  ・レコード作成用番号(長整数型)  ※この他各サブテーブルごとに、20~40程のフィールドがあります。 サブ1~9の計画書番号はメインの計画書番号とリレーションシップしています。 サブフォームに計画書番号を表示するようにしてみると、コピーボタンをクリックしたときサブ2だけがメインで取得した新しい計画書番号が表示されていて、サブ2~9はコピー元の計画書番号が表示されています。 以下にコピーボタンをクリックした時のコードとBeforeUpdate時のコードを記載します。 また、「Forms!メイン!サブ1.Form.レコード作成用番号 = Me.txt計画書No」の箇所はメインの新規作成時にサブ1~9にレコードを作成するようにしています。 (メイン作成と同時にサブにもレコードを作成したかったので・・・) サブ2~9までのコピーができるようにするにはどうしたらよいのでしょうか? よろしくお願いいたします。 Private Sub cmdコピー_click() DoCmd.RunCommand acCmdSelectRecord DoCmd.RunCommand acCmdCopy DoCmd.GoToRecord , , acNewRec DoCmd.RunCommand acCmdPasteAppend Me!コピーフラグ = 1 Me!コピー実行日 = Date Me!サブ1.SetFocus DoCmd.RunCommand acCmdSelectRecord DoCmd.RunCommand acCmdCopy DoCmd.GoToRecord , , acNewRec DoCmd.RunCommand acCmdPasteAppend Me!サブ2のサブフォーム.SetFocus DoCmd.RunCommand acCmdSelectRecord DoCmd.RunCommand acCmdCopy DoCmd.GoToRecord , , acNewRec DoCmd.RunCommand acCmdPasteAppend ※以下サブ3~9までサブ2と同じコードを記述しています。 MsgBox "レコードのコピーが完了しました。" End Sub Private Sub Form_BeforeUpdate(Cancel As Integer) Dim dlgret As Integer dlgret = MsgBox("編集内容を保存しましすか?", vbQuestion + vbOKCancel, "保存確認") If dlgret = vbCancel Then Cancel = True Else '新規作成の場合、作成日フラグは既定値0のため1に変更 If Me!作成フラグ = 0 Then Me!作成フラグ = 1 Me!作成日 = Date If Me!コピーフラグ = 1 Then Forms!メイン!サブ1.Form.Requery Forms!メイン!サブ2.Form.Requery ※サブ3~9も同様にRequeryを行ないます。 Else MsgBox "コピーフラグは" & Forms!メイン!コピーフラグ & "です。" & Chr(13) & _ "新規作成を実行します。""" Forms!メイン!サブ1.Form.レコード作成用番号 = Me.txt計画書No Forms!メイン!サブ2.Form.レコード作成用番号 = Me.txt計画書No ※サブ3~9も同様に処理します。 End If Else End If End Sub

  • Access2007の、フォーム入力について

    下記のようなコマンドを、ボタンに追加しました。 名前の欄に入力して、ボタンを押すと、レコードの名前フィールドに入力されます。 Private Sub コマンド10_Click() If Nz(Me.名前1, "") <> "" Then CurrentDb.Execute "INSERT INTO 氏名 (名前) SELECT '" & Me.名前1 & "'" End If If Nz(Me.名前2, "") <> "" Then CurrentDb.Execute "INSERT INTO 氏名 (名前) SELECT '" & Me.名前2 & "'" End If If Nz(Me.名前3, "") <> "" Then CurrentDb.Execute "INSERT INTO 氏名 (名前) SELECT '" & Me.名前3 & "'" End If If Nz(Me.名前4, "") <> "" Then CurrentDb.Execute "INSERT INTO 氏名 (名前) SELECT '" & Me.名前4 & "'" End If If Nz(Me.名前5, "") <> "" Then CurrentDb.Execute "INSERT INTO 氏名 (名前) SELECT '" & Me.名前5 & "'" End If DoCmd.Close acForm, "フォーム1" End Sub テキストボックスには、それぞれ名前1~5、という名前がつけられています。レコードが追加されるテーブルは「氏名」です。 そこで、さらにテーブルに部署フィールドを追加して、フォームに上から、部署1~5のテキストボックスを追加し、 名前と部署のテキストボックスの、それぞれ対応しているものが、同じレコードに追加されるようにするには どうすればよいでしょうか? 有識者の皆さま、どうぞよろしくお願いいたします。

専門家に質問してみよう