我有一个包含许多变体的VBA类。这些变体用于保存Y x Z大小的数组,但它们是可选输入(因此通常不会使用或初始化变体)。
同一个类中的函数调用每个变体来执行计算。但是,我需要它跳过空白的变体。当我尝试使用IsNull(xyz)和IsEmpty(xyz)时,都返回false。看看xyz上的手表,它有:
Expression: xyz
Value:
Type: Variant/Variant()
Context: className
价值完全空白。
如果这些东西是空的,我可以测试/返回一个布尔值的任何想法?或者如果它们已满,甚至是布尔值,这也会起作用。
由于
编辑:我应该补充一点,IsMissing只是完全崩溃了......
答案 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)来检查数组的较低和较高索引。