“无效使用null”用于返回变量的vba函数

时间:2011-10-25 15:44:01

标签: ms-access vba

我正在尝试编写一个VBA函数,该函数使用SELECT查询从Access表中获取值。这是代码:

Function getTableValue(uniqueID As Long, tableName As String, _ 
idField As String, tableField As String) As Variant

Dim db As Database
Dim rs As Recordset
Dim selectSQL As String

selectSQL = "select * from " & tableName & " where " & idField & "=" & uniqueID

Set db = OpenDatabase(dbPath)
Set rs = db.OpenRecordset(selectSQL)

If rs.RecordCount > 0 Then
    rs.MoveLast
    rs.MoveFirst
    getTableValue = rs.Fields(tableField)
End If

End Function

tableField指定的字段是日期/时间类型且字段为空时,getTableValue()会返回“无效使用空”错误。我认为让函数返回Variant将允许我返回Null值;我该怎么办才能处理这些空日期?

4 个答案:

答案 0 :(得分:6)

事实证明函数的Null值被传递给Date / Time变量。我已经通过使用以下内容解决了这个问题:

dim myDate as date
dim myVar as variant

myVar=getTableValue(idNum,"thisTable","idField", "valueField")
if isNull(myVar) then
 myDate=0
else
 myDate=myVar
endif

虽然它不会检查myVar是否返回日期,但valueField的值类型为日期/时间,所以没关系。

答案 1 :(得分:0)

查看This Link

Variant无法保存从DB返回的空值。 你必须检查是否为null并返回vbNull等价物(不知道你是否可以在VBA中使用vbNull)。

HTH

答案 2 :(得分:0)

也许正在使用Nz? getTAbleValue = Nz(rsFields(tableField),SomeReplacementDate)

我想重点是使用此函数的返回值。要么你总是返回一些正确的,要么你必须检查这个功能的返回值。

我必须承认我不知道null Date可能意味着什么。你知道那可能是什么吗?

答案 3 :(得分:0)

我会更改函数以返回字符串。然后使用nz()通过使字符串为零长度来处理null。

getTableValue = nz(rs.Fields(tableField),"")