質問: ACCESS2000を使用しています。 今「フォーム1」というフォームがあるとして、それには「項目1」という入力欄があるとします。 フォーム1はテーブルと連結しており、値を入れると、テーブルに値が入るようになっています。 今、「フォーム1」の「項目1」に値を入れようとしたとき、 既に「項目1」の値が入っている場合には、「既に値が入っているため、入力できません」 と表示させたいと思っています。 初めての入力のみ、受け付けるということです。 (再度値の変更をするには、ボタンを作成し、それを押すと「項目1」にNULLを入れて入力可にしたいと思っています。) なんとなくですが、「項目1」がNULLか判定し、NULLの時は更新を認め そうでない場合には値を修正できないように イベントの変更時か更新前後にプログラムを組むのだろうと思っておりますが、 どのように書けばよいか、具体的なプログラムをご教示ください。 違う方法で良い案があればそれでもかまいません。 よろしくお願いします。
回答: レコード移動時イベント(Form_Currentイベント)に下記のように1行書き加えれば、項目1が空もしくはヌルの場合だけ入力可能になります。 ``` Private Sub Form_Current() Me.項目1.Enabled = IIf(IsEmpty(Me.項目1.Value) Or IsNull(Me.項目1.Value), True, False) End Sub ``` 項目1の内容にあわせて、例えばボタンを出現させたりするといった処理なども加えるならば、下記の様にして処理を分岐すれば良いでしょう。 ``` Private Sub Form_Current() If IsEmpty(Me.項目1.Value) Or IsNull(Me.項目1.Value) Then Me.項目1.Enabled = True Else Me.項目1.Enabled = False End If End Sub ``` テキストボックス(メッセージ用)とボタン(変更1)を用意して、下記の様にするとほぼ希望どおりかと・・・ (Access2000で作ってから貼り付けてます) ``` Private Sub Form_Current() Me.メッセージ用.Value = "" If IsEmpty(Me.項目1.Value) Or IsNull(Me.項目1.Value) Then Me.項目1.Enabled = True Me.変更1.Visible = False Else Me.項目1.Enabled = False Me.メッセージ用.Value = "項目1は既に入力されています。変更したい場合は、変更ボタンを押してください。" Me.変更1.Visible = True End If End Sub Private Sub 変更1_Click() Me.項目1.Enabled = True Me.項目1.SetFocus Me.変更1.Visible = False End Sub ```