VBA中变量的空值

Hor*_*Kol 18 vba access-vba

如何在VBA中定义空字符串,日期或整数?

当数据不完整或不相关时,我需要能够为某些记录的某些字段分配Null值,但如果我将变量声明为String,Date或Integer,则在尝试分配Null值时会出错.

是唯一使用Variant的解决方案吗?如果是这样,那么VBA中所有其他数据类型的重点是什么?

Jea*_*ett 37

Dim x As Variant
x = Null
Run Code Online (Sandbox Code Playgroud)

只有Variant数据类型可以保存该值Null.

Variant是一种特殊的数据类型,可以包含任何类型的数据[...] Variant也可以包含特殊值Empty,Error,Nothing和Null.

所有其他数据类型的"点"恰恰是它们不能包含任何类型的数据.这有两个我能想到的优点:

  • 程序员更难以错误地将非预期类型的​​数据分配给变量,因为这将在编译时检测到.这有助于防止错误并使您和将要维护代码的下一个人更清楚.
  • 窄数据类型可节省存储空间.将整数放在Variant(16个字节)中占用的内存比将它们放入Int(2个字节)要多.如果您有大型数组,这将变得很重要.

当然,Variants确实有自己的位置,正如本网站上的其他主题所讨论的那样.

  • 我已经为VBA编程了很长一段时间,但是每当我读到Variant可以接受三个不同的,听起来完全一样的特殊值时,它仍然让我很不高兴:Empty,Nothing和Null。 (2认同)
  • 我听说在Office 2013中,`Variant`也会取值`Void`,`Absent`,`Unspecified`,`None`和`Vacuum`. (2认同)
  • @Joel,我认为那里有一些历史.VB语言系列中的"清空"(如"未初始化的`Variant`值")在"Nothing"之前不存在(如"不指向任何东西的对象引用")?正如@HorusKol所说,"Null"是一个特定值(我很确定VBx中的"Null"总是打算成为"数据库"null). (2认同)
  • 如果VBA至少可以添加int选项就好了?(或 Nullable<int>),长吗?(或 Nullable<long>) 等。这是我讨厌 VBA 的众多原因之一(尽管不幸的是,我经常被迫使用它)。 (2认同)