我有一些令我困惑的奇怪行为。我在vb(Microsoft Word Macro版本的VB)中创建了一个函数,如下所示:
Public Function isitnullorempty(newstring As String) As Boolean
If IsNull(newstring) Or IsEmpty(newstring) Or newstring = "" Then
isitnullorempty = False
Else
isitnullorempty = True
End If
End Function
如果我创建一个变量然后将其设置为null,“”或将其保留为空,它似乎按预期工作。我操纵变量,然后做MSGBOX isitnullorempty(变量),它回应我的期望。但是当我将一个记录集放在函数中时,它的行为方式并不相同。我甚至试图将变量设置为记录集,然后测试它,但这也不起作用。如果我尝试调用以下
'ADO query code here (This is an ODBC connection)
DO While (Not oRecordset.EOF)
MsgBox isitnullorempty(oRecordset.Fields("CustomerTypeRefFullName"))
oRecordset.MoveNext
Loop
这会产生错误:Null的使用无效。
所以两个问题。
是否已存在符合我想要的vb功能? 为什么我的代码表现如此?
更奇怪的是,如果我在功能之外单独进行测试,它就可以工作。
临时解决方案
它编写的代码超出了它的需要,但由于我似乎无法使用记录集值调用该函数,因此我将根据我的需要单独检查每条记录,如下所示:
If IsNull(oRecordset.Fields("CustomerTypeRefFullName").Value) Or IsEmpty(oRecordset.Fields("CustomerTypeRefFullName").Value) Or oRecordset.Fields("CustomerTypeRefFullName").Value = "" Then
MsgBox "potato"
End If
答案 0 :(得分:1)
在我看来,你的逻辑是错误的:
如果IsNull(newstring)或IsEmpty(newstring)或newstring =“”
然后
isitnullorempty = 错误
否则
isitnullorempty = True
结束如果
不应该是
如果IsNull(newstring)或IsEmpty(newstring)或newstring =“” 然后
isitnullorempty = TRUE
否则
isitnullorempty = FALSE
结束如果
答案 1 :(得分:0)
答案是,如果要将null传递给函数的参数,则需要将参数设置为variant。 Public Function isitnullorempty(newstring As Variant)As Boolean