试图解决 VBA 中的“无效使用 Null”

Posted

技术标签:

【中文标题】试图解决 VBA 中的“无效使用 Null”【英文标题】:Trying to resolve an "invalid use of Null" in VBA 【发布时间】:2011-04-12 05:22:12 【问题描述】:

先快速sn-p:

Dim GUID As String
Dim givenNames, familyName, preferredName, gender, comments, carer, medicareNumber, patientNumber As String
Dim dob As Variant
Dim deceased, resolved, consultNotes As Boolean
Dim age As Variant

givenNames = Null
familyName = Null
preferredName = Null
gender = Null
dob = Null
comments = Null
deceased = False
resolved = False
carer = Null
age = Null
consultNotes = False
patientNumber = Null ' This is where I get the error

知道为什么最后一个变量会出错吗?我已将 Null 分配给一堆其他字符串,没有任何错误。

【问题讨论】:

patientNumber 是您定义为字符串的唯一变量。您必须为 each 变量指定类型:您不能像在代码中那样定义逗号分隔的变量列表。 【参考方案1】:

在 VBA/VB6 中,字符串不能设置为 Null;只有 Variants 可以设置为 null。此外,当您在问题中声明以逗号分隔的内联变量时,只有最后一个将被键入为字符串;所有其他人都被键入为变体。要在一行中将它们声明为类型,您必须包含类型

Dim a As String, Dim b As String ...

这就是为什么只在一行上声明它们是有意义的。

(顺便说一句,应该注意deceased, resolved 也出于同样的原因被输入为变体。)

【讨论】:

【参考方案2】:

givenNames 等成功的原因是你无意中将它们定义为 Variant 类型。 patientNumber 失败,因为您已成功将其定义为 String,并且字符串不接受 Null 值。

Dim 语句中,As <type> 子句适用于列表中的每个单独变量,因此通过仅将其放在列表末尾,您将显式类型仅应用于最后列出的变量。 Variant 的隐式类型应用于其他类型。

【讨论】:

@HorusKol - np - 很高兴我们能提供帮助。【参考方案3】:

当我在不知道 Variant 的隐式类型的情况下遇到该问题时,我能够使用在 Dim 语句列表末尾定义一个额外变量(例如 BogusVariable)的变通方法。

【讨论】:

【参考方案4】:

在 VBA 字符串中使用 vbNullString 值作为 Null

【讨论】:

以上是关于试图解决 VBA 中的“无效使用 Null”的主要内容,如果未能解决你的问题,请参考以下文章

将小数传递给 vba 的问题

Access-vba复制数据错误

如何解决vba中的运行时错误11除以0?

解决 Excel VBA 文本文件导出中的运行时 91 错误

如何解决 excel vba 中的 Find(what:=) 字符限制

如何使用包含数字varibleex的VBA插入公式