ここから質問投稿すると、最大10000ポイント当たる!!!! >>

Access2000
フォームを読み込んだとき,テキストボックス"受付No."欄が
入力されている場合,テキストボックス"件名"欄をデータの変更が
出来ないようにロックを掛けたいのです。
下記のイベントプロシージャを組んだのですが,全くロックされません。
VBA初心者なので多分とんでもない間違いをしていると思いますが,
どこが違うのかご指摘下さい。

Private Sub Form_Load()
If Me.受付No. <> "" Then
Me.件名.Locked = True
Me.件名.Enabled = False
End If
End Sub

A 回答 (3件)

私は、[受付番号]でサンプルを書いています。


で、質問者は、[受付No.]です。
そこら辺りは自分の環境で・・・。

Private Sub Form_Current()
  If Me.NewRecord Then
    Me.受付番号 = ""
  End If
  受付番号_AfterUpdate
End Sub

Private Sub Form_Current()
  受付番号_AfterUpdate
End Sub

既定値を設定していればこれでもOKです

※既定値=0の可能性があるので注意を喚起するための3行でしかありません。
    • good
    • 0
この回答へのお礼

どうも有難うございました。

お礼日時:2008/07/23 16:42

>テキストボックス"受付No."欄が


>入力されている場合,テキストボックス"件名"欄をデータの変更が
>出来ないようにロックを掛けたいのです。
これだけならVBAを使うより条件付書式のほうが簡単ですよ
特に帳票フォームの場合VBAの方法ではレコードごとに異なる設定はできませんが
条件付書式なら可能です

条件式
[受付No] is not null
    • good
    • 0
この回答へのお礼

早速の回答有難うございます。
条件付書式ですと,背景色が濃いグレーになり,
非常に見づらくなってしまうので。

お礼日時:2008/07/23 07:54

[イミディエイト]


? Null<>""
Null
? CBool(Len(null & ""))
False

このイミディエイトウインドウでのテスト結果が全てです。
つまり、空欄を""と比較しても真とか偽とかの値ではなく Null という判定になります。
この不具合を回避するには Len関数で長さを測ればいいです。

Private Sub Form_Current()
  If Me.NewRecord Then
    受付番号 = ""
  End If
  受付番号_AfterUpdate
End Sub

Private Sub 受付番号_AfterUpdate()
  Dim isLocked As Boolean
  
  isLocked = Len(Me.受付番号 & "")
  Me.件名.Enabled = Not isLocked
  Me.件名.Locked = isLocked
End Sub

これですと、各レコードがカレントになる都度に<受付番号_AfterUpdate>がコールされます。
<受付番号_AfterUpdate>では、[受付番号]の長さが0ならば<偽>、そうでなければ<真>と。
これは、<真>と<偽>の約束事です。

[イミディエイト]
? CBool(0)
False
? CBool(1)
True
    • good
    • 0
この回答へのお礼

早速の回答有難うございます。
一日色々いじったのですが,うまくいきません。
VBA難しいものですね。
入力済みのレコードは,ロックが掛かるのですが,
新規データの入力画面に移ると,
VBの画面になって「受付番号 = ""」のラインが黄色になり
実行時エラー
「フィールド'受付番号'は長さ0の文字列を格納できません」
となってしまいます。

お礼日時:2008/07/23 08:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング