VBA变体 - 空数组的IsNull和IsEmpty都为false

时间:2016-05-10 14:52:42

标签: excel vba excel-vba

我有一个包含许多变体的VBA类。这些变体用于保存Y x Z大小的数组,但它们是可选输入(因此通常不会使用或初始化变体)。

同一个类中的函数调用每个变体来执行计算。但是,我需要它跳过空白的变体。当我尝试使用IsNull(xyz)和IsEmpty(xyz)时,都返回false。看看xyz上的手表,它有:

Expression: xyz
Value:
Type: Variant/Variant()
Context: className

价值完全空白。

如果这些东西是空的,我可以测试/返回一个布尔值的任何想法?或者如果它们已满,甚至是布尔值,这也会起作用。

由于

编辑:我应该补充一点,IsMissing只是完全崩溃了......

3 个答案:

答案 0 :(得分:3)

非常脏的解决方法,但这样的事情可能会起到作用:

USE AdventureWorks2008R2;
GO
SELECT Ord.SalesOrderID, Ord.OrderDate,
    (SELECT MAX(OrdDet.UnitPrice)
     FROM AdventureWorks.Sales.SalesOrderDetail AS OrdDet
     WHERE Ord.SalesOrderID = OrdDet.SalesOrderID) AS MaxUnitPrice
FROM AdventureWorks2008R2.Sales.SalesOrderHeader AS Ord

答案 1 :(得分:1)

我过去使用的一种方法是测试是否使用辅助函数填充数组。我使用空字符串分隔符连接数组并测试长度大于零。它在我的情况下起作用,但我不确定逻辑中是否存在任何缺陷。

如果数组为空,则代码返回true,否则返回false:

Function TestIfArrayIsEmpty(vArray As Variant) As Boolean
    TestIfArrayIsEmpty = (Len(Join(vArray, "")) = 0)
End Function

答案 2 :(得分:-1)

您可以使用vartype(variable_name。您可以检查 vartype(varriable_name)= vbArray或VbEmpty或VbNull 然后检查eac维度的LBound和UBound 例如

LBound(变量,1)和UBound(变量名,1)来检查数组的较低和较高索引。