2012-05-02 228 views
1

我在訪問表單中有3個字段。MS Access表單事件,VBA

  • 字段1 - 是預先填充了一些數據的文本字段。沒有空記錄
  • 字段2 - 是預先填充了一些數據的文本字段。它可以有一個值或爲null。
  • 字段3 - 是一個文本字段。用戶將在該字段中輸入信息。

有一個規則。如果字段2中存在空值,則字段3將等於來自字段1的值,因此我希望它自動填充字段1中的字段3.如果值不爲空,則用戶將手動填充字段記錄。

我已經設置了一個形式負載事件:

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

我有,則用戶可能想改變字段1的預填充的值的問題,並且如果對應的字段2的記錄是空白,我希望字段3更新爲用戶在字段1中更改的相同值。我不希望必須重新加載表單才能進行此更新。我已經在After_Update事件和更改事件中嘗試了上述語法,但沒有更新。

任何人都可以建議我做錯了什麼?

謝謝, 邁克

+0

一種方法是將您的檢查機制放入一個小的子機中,類似於您已有的機制。從form_load()調用這個子,如果需要的話甚至可以從form_current調用。然後您可以在field1_AfterUpdate事件中調用它。 – ExternalUse

+0

我不確定幾分鐘前誰輸入了答案,但'If(IsNull(Me.DEV_TYPE)或Me.DEV_TYPE =「」)然後'爲我工作。它消失了,但謝謝。 – Mike

+1

使用'IsNull(Me.Field2.Value)或Me.Field2.Value =「」' –

回答

2

邁克已經得到了他的答案,但我會給中的解釋的形式更全面的答案。

這裏的問題在於,您試圖將null的字段與空字符串進行比較。這就像你做了

if null = "" then 
    'do stuff 
end if 

null在比較中使用的問題,結果總是空 - 這將導致if評估爲假。你甚至不能做到這一點:

if not(null) then 
    'do stuff 
end if 

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

傳統的解決方案是我們isnull(x),其計算結果爲true如果xnull

蒂姆·威廉姆斯表示,你可以使用:

IsNull(x) or x="" 

有些人可能會考慮x=""是多餘的,如果x只能爲一個空字符串返回null。

+0

感謝CodeSlave! – Mike

3

另一個測試爲空字符串或NULL是

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

追加一個空字符串爲空或空字符串導致一個空字符串,然後你就可以測試長度

+0

感謝您的建議肖恩! – Mike

1

這工作太:

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