我想查找表中的空值和空值。我使用Asc
將表格的值分配給一個變量,然後根據它們的ASCII值區分空和空白。但是當代碼試圖讀取空字段的ASCII值時,我得到了"runtime error 94: Invalid use of null"
。訪問Vba - 查找空值和空值
回答
你可以試試下面的用戶定義函數測試表值:
Public Function text_test(str_in as Variant) As Long
' given input str_in, return -2 if input is Null,
' -1 if input is zero-length string; otherwise return 0
' use function Nz to test if input is Null and return -2,
' otherwise check non-null value with Len
' and return -1 if it is a 0-length string,
' otherwise return 0 for anything else
text_test = IIf(Nz([str_in], "null") = "null", -2, _
IIf(Len(str_in) = 0, -1, 0))
End Function
在即時窗口中運行有不同的輸入測試: text_test(「弗雷德」) ; text_test( 「」); text_test(NULL); text_test(9); text_test(假)
應返回: 0 -1 -2 0 0
請注意,您不能在函數聲明中使用str_in作爲字符串,因爲這會導致您在問題中引用的同一錯誤。
我想你應該使用IsNull()
來決定一個值是否爲空。
https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-5034252.html
當我必須處理的返回值可以爲null或零長度字符串,我使用轉換ZLS功能爲Null:
Public Function varZLStoNull(varInput As Variant) As Variant
If Len(varInput) = 0 Then
varZLStoNull = Null
Else
varZLStoNull = varInput
End If
End Function
這需要的事實,即在VBA萊恩()函數將Null和ZLS完全相同,以便您不必分別處理每個個案。
但是,請記住,如果您在WHERE子句中使用它,則會失去性能,因爲它無法使用索引。因此,在WHERE子句中,您將測試IS NULL或=「」
SELECT MyField
FROM MyTable
WHERE MyField Is Null Or MyField = ""
這樣會更高效。 varZLSToNull函數在將已處理數據附加到ZLS Allowed設置爲NO(如其應該)的字段時非常有用。
你應該考慮的另一件事是改變你的領域,以便它不允許ZLS,然後運行一個查詢(使用上面的WHERE子句而沒有Is Null)來將所有的ZLS替換爲Null。當然,假定你的數據不區分Null和ZLS,表示兩個不同的事物(Null意思是「我們在這裏沒有記錄任何值」,而ZLS意思是「我們在這裏記錄了一個空值)」 。
封裝代碼中的if語句中,比較像這樣的字符串值vbNullString:
If (Not (<string> = vbNullString) Then
如果字符串不爲空執行原來的代碼
如果空添加一個else塊執行你需要做的,如果值爲空
是的,這是一個古老的線程,大不了...
這是測試,我已經看到了NULL和零長度值的最簡潔的方式:
FinalValue = IIf(Not Len(Nz(Value, "")) = 0, Value, Null)
怎麼可能比大衛·芬頓的上述優異功能的執行,我不知道。我知道,我在這裏介紹的單線和David的功能幾乎完全一樣。我懷疑單線程可能會比呼叫函數更好一些。另一方面,它使用包容性的If,所以它實際上可能會變慢。誰知道?
我主要在Class模塊中使用它。例如,使用DAO Recordset創建記錄時:
With rst
.AddNew
!JobCardID = IIf(Not m_JobCardID = 0, m_JobCardID, Null)
!ConstructionProjectID = IIf(Not m_ConstructionProjectID = 0, m_ConstructionProjectID, Null)
!MajorDisciplineID = IIf(Not m_MajorDisciplineID = 0, m_MajorDisciplineID, Null)
!ActivityDescriptorID = IIf(Not m_ActivityDescriptorID = 0, m_ActivityDescriptorID, Null)
!ActivityStatus = IIf(Not Len(Nz(m_ActivityStatus, "")) = 0, m_ActivityStatus, Null
'etc...
End With
在上面的代碼中,ActivityStatus是相關的String。 注意:我從來沒有設計一個數據庫,其中的字段允許使用零長度的字符串。重複:從不。
- 1. VBA訪問 - FindFirst空值
- 2. VBA中的空值問題
- 3. 查找匹配空值和空值的ElasticSearch記錄
- 4. 空值和空值
- 5. 在列中查找空值
- 6. 訪問數組值爲空
- 7. 在訪問vb.net的空值
- 8. 與空值(SQL/VBA)
- 9. 字符串 - 查找空值
- 10. 查找空或值(S)
- 11. 如何在2010訪問中將查找字段值設置爲空/空白?
- 12. 找到空值
- 13. SQL查詢空值問題
- 14. Linq空值查詢問題
- 15. 訪問VBA多值
- 16. VBA訪問獲得行來源找到查找此值
- 17. 訪問查詢以包含所有值,包括空值
- 18. 查詢的MongoDB空和非空值
- 19. 訪問表單加載時空組合框的值vba
- 20. 聯合空和值檢查
- 21. 級聯非空值vba
- 22. VBA Phantom空陣列值
- 23. VBA - Combobox值始終爲空
- 24. VBA中變量的空值
- 25. 空值問題
- 26. 空值檢查
- 27. 檢查空值
- 28. 檢查SSRS中的空值和值
- 29. 使用查找和空值,而OR'ing其他值
- 30. 尋找空列值
請問您使用此功能的是什麼?如果你確實試圖在表中找到它們,爲什麼不在查詢的where條件中放置null或「」而不是調用函數呢? – JohnFx 2009-08-19 02:34:47