• ベストアンサー

Access レコードのロック

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

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

  • ベストアンサー
noname#140971
noname#140971
回答No.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行でしかありません。

hirocha03
質問者

お礼

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

その他の回答 (2)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

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

hirocha03
質問者

お礼

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

noname#140971
noname#140971
回答No.1

[イミディエイト] ? 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

hirocha03
質問者

お礼

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

関連するQ&A