ACCESS2000を使用しています。

今「フォーム1」というフォームがあるとして、それには「項目1」という入力欄があるとします。
フォーム1はテーブルと連結しており、値を入れると、テーブルに値が入るようになっています。

今、「フォーム1」の「項目1」に値を入れようとしたとき、
既に「項目1」の値が入っている場合には、「既に値が入っているため、入力できません」
と表示させたいと思っています。
初めての入力のみ、受け付けるということです。
(再度値の変更をするには、ボタンを作成し、それを押すと「項目1」にNULLを入れて入力可にしたいと思っています。)

なんとなくですが、「項目1」がNULLか判定し、NULLの時は更新を認め
そうでない場合には値を修正できないように
イベントの変更時か更新前後にプログラムを組むのだろうと思っておりますが、
どのように書けばよいか、具体的なプログラムをご教示ください。
違う方法で良い案があればそれでもかまいません。
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/07/28 19:48:23
  • 終了:2012/07/28 22:16:13

ベストアンサー

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492012/07/28 21:03:51

ポイント200pt

レコード移動時イベント(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
id:syo777

ここまで丁寧にご説明いただきありがとうございました^^
大変助かりました!

2012/07/28 22:16:01

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません