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

解決済みの質問

ACCESS テキストボックスを参照専用(入力不可)にしたい

こんにちは。

ACCESS2003で商品管理を作成しています。
入力用フォームに、5つのチェックボックスがあり、それぞれにテキストボックスが横に配置されています。

商品別にチェックボックスにチェックを入れ、テキストボックスにその商品の詳細を入力しています。

概要は、

【型式】
【商品(1)】(チェックボックス)
・・・・・【商品(1)詳細】(テキストボックス)
【商品(2)】(チェックボックス)
・・・・・【商品(2)詳細】(テキストボックス)
【商品(3)】(チェックボックス)
・・・・・【商品(1)詳細】(テキストボックス)
【商品(4)】(チェックボックス)
・・・・・【商品(4)詳細】(テキストボックス)
【商品(5)】(チェックボックス)
・・・・・【商品(5)詳細】(テキストボックス)


入力ミスをなくすために、5個のチェックボックスのうち1箇所にチェックを入れると、チェックを入れた箇所の横のテキストボックス以外のテキストボックスを参照専用(入力不可)にしたいのですが、どうすればいいでしょうか?

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

投稿日時 - 2006-02-22 17:08:30

QNo.1984099

困ってます

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

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)」を逆にします。

投稿日時 - 2006-02-24 00:39:12

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

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

回答(4)

ANo.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

投稿日時 - 2006-02-22 18:59:02

ANo.2

各チェックボックスの更新後イベントで下記のように横のテキストは入力可、他のチェックボックスは元に戻す設定ですね。
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にして、すべてのテキストボックスを入力可にする解除にするようなボタンかイベントが必要ではないですか?

投稿日時 - 2006-02-22 17:44:09

お礼

ご回答ありがとうございます。
返事が遅れて申し訳ありません。

とりあえず商品(1)のチェックボックスにて「更新後処理」に下記のように書いてみました。

Private Sub 区分_AfterUpdate()
 If Me.区分 = True Then
 Me.商品(1).Locked = True
 else
 Me.商品(1).Locked = False
End Sub

保存してチェックをするとエラーが出てしまいます。
命令文が間違っているのでしょうか?

投稿日時 - 2006-02-23 23:18:33

ANo.1

チェックボックスの「更新後処理」にコードプロシージャを設定し、テキストボックスの「編集ロック」を「はい」にするようにVBを組んで下さい。

投稿日時 - 2006-02-22 17:37:33

お礼

ご回答ありがとうございます。
返事が遅れて申し訳ありません。

とりあえず商品(1)のチェックボックスにて「更新後処理」に下記のように書いてみました。

Private Sub 区分_AfterUpdate()
 If Me.区分 = True Then
 Me.商品(1).Locked = True
 else
 Me.商品(1).Locked = False
End Sub

保存してチェックをするとエラーが出てしまいます。
命令文が間違っているのでしょうか?

投稿日時 - 2006-02-23 23:17:48

あなたにオススメの質問