- ベストアンサー
ACCESS テキストボックスを参照専用(入力不可)にしたい
こんにちは。 ACCESS2003で商品管理を作成しています。 入力用フォームに、5つのチェックボックスがあり、それぞれにテキストボックスが横に配置されています。 商品別にチェックボックスにチェックを入れ、テキストボックスにその商品の詳細を入力しています。 概要は、 【型式】 【商品(1)】(チェックボックス) ・・・・・【商品(1)詳細】(テキストボックス) 【商品(2)】(チェックボックス) ・・・・・【商品(2)詳細】(テキストボックス) 【商品(3)】(チェックボックス) ・・・・・【商品(1)詳細】(テキストボックス) 【商品(4)】(チェックボックス) ・・・・・【商品(4)詳細】(テキストボックス) 【商品(5)】(チェックボックス) ・・・・・【商品(5)詳細】(テキストボックス) 入力ミスをなくすために、5個のチェックボックスのうち1箇所にチェックを入れると、チェックを入れた箇所の横のテキストボックス以外のテキストボックスを参照専用(入力不可)にしたいのですが、どうすればいいでしょうか? よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Private Sub Form_Open(Cancel As Integer) 商品_1_ = False 商品_2_ = False 商品_3_ = False 商品_4_ = False 商品_5_ = False 商品_1_詳細.Enabled = 商品_1_ 商品_2_詳細.Enabled = 商品_2_ 商品_3_詳細.Enabled = 商品_3_ 商品_4_詳細.Enabled = 商品_4_ 商品_5_詳細.Enabled = 商品_5_ End Sub Private Sub 商品_1__AfterUpdate() 商品_2_ = False 商品_3_ = False 商品_4_ = False 商品_5_ = False 商品_1_詳細.Enabled = 商品_1_ 商品_2_詳細.Enabled = 商品_2_ 商品_3_詳細.Enabled = 商品_3_ 商品_4_詳細.Enabled = 商品_4_ 商品_5_詳細.Enabled = 商品_5_ End Sub Private Sub 商品_2__AfterUpdate() 商品_1_ = False 商品_3_ = False 商品_4_ = False 商品_5_ = False 商品_1_詳細.Enabled = 商品_1_ 商品_2_詳細.Enabled = 商品_2_ 商品_3_詳細.Enabled = 商品_3_ 商品_4_詳細.Enabled = 商品_4_ 商品_5_詳細.Enabled = 商品_5_ End Sub Private Sub 商品_3__AfterUpdate() 商品_1_ = False 商品_2_ = False 商品_4_ = False 商品_5_ = False 商品_1_詳細.Enabled = 商品_1_ 商品_2_詳細.Enabled = 商品_2_ 商品_3_詳細.Enabled = 商品_3_ 商品_4_詳細.Enabled = 商品_4_ 商品_5_詳細.Enabled = 商品_5_ End Sub Private Sub 商品_4__AfterUpdate() 商品_1_ = False 商品_2_ = False 商品_3_ = False 商品_5_ = False 商品_1_詳細.Enabled = 商品_1_ 商品_2_詳細.Enabled = 商品_2_ 商品_3_詳細.Enabled = 商品_3_ 商品_4_詳細.Enabled = 商品_4_ 商品_5_詳細.Enabled = 商品_5_ End Sub Private Sub 商品_5__AfterUpdate() 商品_1_ = False 商品_2_ = False 商品_3_ = False 商品_4_ = False 商品_1_詳細.Enabled = 商品_1_ 商品_2_詳細.Enabled = 商品_2_ 商品_3_詳細.Enabled = 商品_3_ 商品_4_詳細.Enabled = 商品_4_ 商品_5_詳細.Enabled = 商品_5_ End Sub コントロール(テキストボックスやチェックボックスなどの事)の名前に「(」や「)」を含む場合、コード上では「(」と「)」を「_」に変える必要があります。 商品(1) ↓ 商品_1_ 商品(1)詳細 ↓ 商品_1_詳細 <注> 「(」と「)」は、コード上では関数や配列など、特別な意味を持つ特殊記号なので、このような書き換えが必要です。 なお、この例では、入力できないのをより明確にする為に、LockedプロパティではなくEnabledプロパティを操作しています。 操作するのをLockedプロパティにしたい場合は 商品_1_詳細.Enabled = 商品_1_ を 商品_1_詳細.Locked = Not 商品_1_ に変更します。 <注> Lockedプロパティは「はい/いいえ」がEnabledプロパティの逆なので、Not演算子を使用して「はい(-1)」「いいえ(0)」を逆にします。
その他の回答 (3)
1、チェックボックスをフレームコントロール(商品入力番号)を利用して配置します。 ・フレームは非表示にします。 ・規定値=1。 2、テキストボックスの名称を工夫します。 商品明細_1 商品明細_2 ・・・・・ 商品明細_5 こういう仕掛けですと、 Private Sub 商品入力番号_AfterUpdate() Dim I As Integer Dim N As Integer N = Me.商品入力番号 For I = 1 To 5 Me.Controls("商品詳細_" & I).Enabled = CBool(I = N) Next I End Sub
- mshr1962
- ベストアンサー率39% (7417/18945)
各チェックボックスの更新後イベントで下記のように横のテキストは入力可、他のチェックボックスは元に戻す設定ですね。 Private Sub 商品(1)_AfterUpdate() 商品(1)詳細.Locked = False 商品(2)詳細.Locked = True : 商品(2) = False 商品(3)詳細.Locked = True : 商品(3) = False 商品(4)詳細.Locked = True : 商品(4) = False 商品(5)詳細.Locked = True : 商品(5) = False End Sub ※すべてのチェックボックスをFalseにして、すべてのテキストボックスを入力可にする解除にするようなボタンかイベントが必要ではないですか?
- chie65536
- ベストアンサー率41% (2512/6032)
チェックボックスの「更新後処理」にコードプロシージャを設定し、テキストボックスの「編集ロック」を「はい」にするようにVBを組んで下さい。
お礼
ご回答ありがとうございます。 返事が遅れて申し訳ありません。 とりあえず商品(1)のチェックボックスにて「更新後処理」に下記のように書いてみました。 Private Sub 区分_AfterUpdate() If Me.区分 = True Then Me.商品(1).Locked = True else Me.商品(1).Locked = False End Sub 保存してチェックをするとエラーが出てしまいます。 命令文が間違っているのでしょうか?
お礼
ご回答ありがとうございます。 返事が遅れて申し訳ありません。 とりあえず商品(1)のチェックボックスにて「更新後処理」に下記のように書いてみました。 Private Sub 区分_AfterUpdate() If Me.区分 = True Then Me.商品(1).Locked = True else Me.商品(1).Locked = False End Sub 保存してチェックをするとエラーが出てしまいます。 命令文が間違っているのでしょうか?