【问题标题】:Word VBA - IsEmpty always returns falseWord VBA - IsEmpty 总是返回 false
【发布时间】:2021-11-22 21:33:21
【问题描述】:

我发誓这段代码昨天有效,但今天 IsEmpty 总是返回 False,即使在声明之后也是如此:

Sub TestSub()
Dim ThisArray() As Variant

MsgBox IsEmpty(ThisArray)

End Sub

我找到了另一个解决方案(How to check for empty array in vba macro 并感谢 @ahuth)所以这只是出于好奇 - 为什么 IsEmpty 总是为我返回 False?

【问题讨论】:

    标签: arrays vba ms-word


    【解决方案1】:

    IsEmpty 是一个检查Variant 变量是否包含任何值的函数。 Variant 可以保存任何类型的数据(数字、字符串、对象引用、布尔值、任何类型的数组……)。如果您将某些内容分配给变体变量,则变体知道此时它拥有哪种数据类型。但是,如果您只是声明一个变体变量,它会使用值Empty 进行初始化,您可以使用IsEmpty 进行检查(或者您可以使用函数Vartype,如果它返回0,则表示为空) .

    所有其他变量类型永远不会为空,因为它们在 VBA 中具有初始值(0 表示数字,“”表示字符串,Nothing 表示对象)。所有这些初始值都不是empty。想想看,只要 VBA 知道数据类型,isEmpty 就会返回 False。 Variant 数组不为空(其数据类型为“Array of..”)。

    IsEmpty 的主要原因是检查 Excel 中单元格的内容。如果单元格没有值,则返回 true。但是,一次检查多个单元格总是会返回 false,即使所有单元格都是空的。

    Dim s As String, l As Long, v As Variant, a() As Variant, r As Range
    
    Debug.Print "String:  ", IsEmpty(s)
    Debug.Print "Number:  ", IsEmpty(l)
    Debug.Print "Variant: ", IsEmpty(v)
    Debug.Print "Array:   ", IsEmpty(a)
    Debug.Print "Object:  ", IsEmpty(r)
        
    Set r = ActiveSheet.Range("A1")
    Debug.Print "Cell:    ", IsEmpty(r)
    
    Set r = ActiveSheet.Range("A1:A3")
    Debug.Print "Cells:   ", IsEmpty(r)
    

    显示(假设工作表为空)

    String:       False
    Number:       False
    Variant:      True
    Array:        False
    Object:       False
    Cell:         True
    Cells:        False
    

    【讨论】:

    • 非常感谢您的全面回复。 但是,如果你只是声明一个变体变量,它会被初始化为 Empty,你可以用 IsEmpty 来检查它(或者你可以使用函数 Vartype,如果它返回 0,则表示为 Empty) 这不正是我的代码 sn-p 所做的吗?我声明变体变量 (ThisArray),然后立即测试 IsEmpty,它返回 False。
    • 不,您将其声明为 Array of Variant。你可以使用ThisArray As Variant 作为一个变量来保存一个数组,但是如果你写ThisArray() As Variant,它已经是一个数组(但没有任何元素)。
    • 啊啊啊啊!知道了。谢谢。
    • @StuartL - 如果您认为ThisArray() As Variant 是多个变量,那么IsEmpty 的行为与一次检查多个单元格相同。事实上,描述单元格范围的另一种方式是单元格数组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 2021-11-05
    • 2018-11-05
    • 2019-05-06
    • 2017-04-29
    • 2013-04-30
    相关资源
    最近更新 更多