2012-05-02 22 views
1

アクセスフォームに3つのフィールドがあります。MS Accessフォームイベント、VBA

  • フィールド1 - 一部のデータが事前に入力されたテキストフィールドです。 nullレコードがありません。
  • フィールド2 - 一部のデータが事前入力されたテキストフィールドです。値を持つか、nullにすることができます。
  • フィールド3 - テキストフィールドです。ユーザーはフィールドに情報を入力します。

ルールがあります。フィールド2にnull値がある場合、フィールド3はフィールド1の値と等しくなりますので、フィールド1からフィールド3に自動的に値を設定します。値がnullでない場合、ユーザーはフィールドレコードを手動で入力します。

私は、フォームのLoadイベントを設定している

:私が午前問題は、あるユーザーがフィールド1の前の人口値を変更することもできますし、対応するフィールド2レコードがある場合

If Me.field2 = "" Then 
    Me.field3 = Me.field1 

空白の場合、ユーザーがフィールド1で変更したのと同じ値でフィールド3を更新します。この更新が発生するように、常にフォームを再ロードする必要はありません。 After_Updateイベントと変更イベントで上記の構文を試しましたが、更新していません。

誰でも私が間違っていることを示唆することはできますか?

おかげで、 マイク

+0

あなたのチェックメカニズムを、あなたが既に持っているのと同じような小さなサブに置くことです。このサブをform_load()から呼び出すこともできますし、必要に応じてform_currentから呼び出すこともできます。その後、field1_AfterUpdateイベントで呼び出すことができます。 – ExternalUse

+0

数分前に誰が答えを入力したのか分かりませんが、 'If(IsNull(Me.DEV_TYPE)Or Me.DEV_TYPE = "")Thenは私のために働いていました。それは答えとして消えたが、ありがとう。 – Mike

+1

'IsNull(Me.Field2.Value)またはMe.Field2.Value =" "' –

答えて

2

マイクのは、すでに彼の答えを得たが、私は説明の形でより完全な答えを与えるでしょう。

ここでの問題は、nullというフィールドを空の文字列と比較しようとしていることです。 ifがfalseに評価する原因となる - あなたはnullが比較に使用されている場合、問題が、結果は常にnullです

if null = "" then 
    'do stuff 
end if 

をやったようなものです。従来のソリューションはxnullある場合trueと評価され、私たちisnull(x)にある

if not(null) then 
    'do stuff 
end if 

または

if not (null <> "") then 
    'do stuff 
end if 

:あなたもこれを行うことはできません。ティム・ウィリアムズのよう

はあなたが使用することができ、指示:

IsNull(x) or x="" 

一部はxのみ空の文字列にnullを返すことができる場合x=""が冗長であることを考えるかもしれません。

+0

ありがとうCodeSlave! – Mike

3

空の文字列またはnullのための別のテストは、NULLに空の文字列またはあなたは長さ

+0

提案してくれてありがとうSean! – Mike

1

のためのテストは、これはあまりにも働くことができ、空の文字列に空の文字列の結果を、追加

if len(field1 & "")=0 then 'do null stuff 

次のとおりです。

if Nz(Field1, "") <> "" then 'do null/empty stuff