gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 01:59:47 24 4
gpt4 key购买 nike

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

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

我想填充紧固件集合:

Cfastener as collection

在文本文件中,类型、编号、主设备和从设备可以按随机顺序出现,并且并不总是全部存在。为了解决这个问题,我定义了一个当前紧固件(某种缓冲区)和一个默认的“空”紧固件:

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

我读取了我的文本文件,当我检测到引用这些属性之一的关键字时,我测试当前紧固件中的值:

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" 表示字符串作为默认空参数。到目前为止,这还好,因为参数无法获取该值。但现在,我想为master和slave添加一个空间位置,它可以是-1。所以我想回到我的第一个想法,即将所有 initfixation 参数定义为 empty

但是如果我没记错的话,在 vba 中不可能区分 0 值和 empty 值,这会带来麻烦。

你知道一个默认值吗,它不是 0,它可以与 0 区分开,但它不是 -1?

最佳答案

EmptyVariant 类型一起使用。将 StringLong 设置为 Empty,然后使用 IsEmpty() 测试其空性是行不通的。

但是,您可以使用变体来存储数据,然后您可以安全地使用Empty值来表示空/缺失值。

你说得对,VB 会将 Empty 转换为 0 以进行数字比较。例如:

Dim v As Variant
Debug.Print (v = 0) ' => True

但是您可以使用 VarType() 函数来测试变体是否具有 Empty 值:

Dim v As Variant
Debug.Print VarType(v) = vbEmpty ' => True (empty/uninitialized)
v = 0
Debug.Print VarType(v) = vbEmpty ' => False
v = Empty
Debug.Print VarType(v) = vbEmpty ' => True (empty)

关于vba - 如何在vba中构建一个可以区分0的默认空对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32483128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com