关于对象:VBA检查变量是否为空

VBA Check if variable is empty

我有一个对象,在其中我想检查一些属性是否设置为假,比如:

1
2
3
If (not objresult.EOF) Then
  'Some code
End if

但不知怎么的,有时候objresult.EOFEmpty,我该如何检查?

  • IsEmpty函数仅用于Excel单元格
  • objresult.EOF Is Nothing—返回Empty
  • objresult.EOF <> null—也返回Empty


测试方式取决于属性的数据类型:

1
2
3
4
5
6
| Type                                 | Test                            | Test2
| Numeric (Long, Integer, Double etc.) | If obj.Property = 0 Then        |
| Boolen (True/False)                  | If Not obj.Property Then        | If obj.Property = False Then
| Object                               | If obj.Property Is Nothing Then |
| String                               | If obj.Property ="" Then       | If LenB(obj.Property) = 0 Then
| Variant                              | If obj.Property = Empty Then    |

通过按F2启动对象浏览器并查找对象,可以判断数据类型。另一种方法是只使用typename函数:MsgBox TypeName(obj.Property)


要检查EDOCX1[1]是否为空,您需要这样做:

1
Isnull(myvar) = True

1
Not Isnull(myvar)


对于一个数字来说,这是很困难的,因为如果一个数字单元格是emptyvba会给它指定一个默认值0,所以vba代码很难分辨输入的零和空白数字单元格之间的差异。

下面的检查对我有效,以查看是否在单元格中输入了实际的0:

1
2
3
If CStr(rng.value) ="0" then
    'your code here'
End If


我有一个类似的问题,一个整数可以在AccessVBA中合法地分配为0。以上所有的解决方案都不适合我。

起初,我只是使用了一个布尔变量和if语句:

1
2
3
4
5
Dim i as integer, bol as boolean
   If bol = false then
      i = ValueIWantToAssign
      bol = True
   End If

在我的例子中,我的整型变量赋值是在一个for循环和另一个if语句中进行的,所以我最后使用了"exit for",因为它更简洁。

像这样:

1
2
3
4
5
6
7
Dim i as integer
ForLoopStart
   If ConditionIsMet Then
      i = ValueIWantToAssign
   Exit For
   End If
ForLoopEnd