如何构建一个可以在vba中区别于0的默认空对象?

时间:2015-09-09 15:03:12

标签: excel vba excel-vba is-empty

我正在阅读包含机械紧固件数据的文本文件。我使用以下属性构建了一个对象紧固件(通过类):

Cfastener as collection

我想填写一系列紧固件:

currentfastener as fastener
initfastener as fastener
with initfastener
    .type = "-1"
    .number = -1
    .master = -1
    .slave = -1
end with

在文本文件中,类型,编号,主服务器和从服务器可以按随机顺序出现,但并不总是存在。为了解决这个问题,我定义了一个当前的紧固件(一种缓冲区)和一个默认的"空的"紧固件:

current fastener

我读取了我的文本文件,当我检测到引用其中一个属性的关键字时,我会测试Do until .atendofstream line = .readline Select case line Case masterkeyword if currentfastener.master <> -1 then 'We already have a master. This means that we need to save the currentfastener and start a new one. Cfasteners.add currentfastener currentfastener = initfastener else 'master is "empty": we fill the currentfastener. currentfastener.master= "value read from the text stream" end if End Select Loop 中的值:

-1

到目前为止,我使用"-1"表示数字,-1表示字符串作为默认空参数。到目前为止它很好,因为参数无法获得这个值。但现在,我想为主服务器和从服务器添加空间位置,它可以是initfixation。所以我想回到我的第一个想法,即将所有empty参数定义为0

但如果我没有弄错,则无法区分empty值与vba中的{{1}}值,这会造成麻烦。

您是否知道一个默认值,即非0,可以区别于0而不是-1?

1 个答案:

答案 0 :(得分:1)

声明所有这些变体。

 type as string
 number as long
 master as long
 slave as long

声明后的默认值为vbEmpty。

您可以测试此

Dim av As Variant

If IsEmpty(av) Then Debug.Print "if isempty(av ) "

' I Wouldn't use this (it works but is overkill)
' If VarType(av) = vbEmpty Then Debug.Print "If VarType(av)= vbEmpty "

您可以明确指定Empty,例如

av = Empty

VB会将Empty转换为0进行数值比较。