我有代码创建一个数组,并在满足某些条件时将“供应商名称”或“空”(实际字符串为空)输入数组。如果不满足某些条件,阵列将不会填充任何数据,因此是空的(或者我相信)。
我要做的下一件事是只打印出该数组中列出的供应商名称。因此,我必须创建一个If
语句,只有当数组中的项没有值为“null”且数组不为空时才会输入该语句。
我在下面的代码中遇到以下问题。字符串数组supplierCategoryP(r)
不符合条件,因此从未填充任何信息。所以我假设这是一个空数组。然而,当我调试时,代码显示仍然输入了第一个If
:
If supplierCategoryP(r) <> "null" And Not IsEmpty(supplierCategoryP(r)) Then
......虽然它不应该,因为数组是空的。
k = 1
If countNoNull > 0 Then
moveDownBy = countNoNull
For r = 1 To nP
If supplierCategoryP(r) <> "null" And Not IsEmpty(supplierCategoryP(r)) Then
Cells(9 + k + moveDownBy, 5) = supplierCategoryP(r)
k = k + 1
countNoNull = countNoNull + 1
End If
Next r
Else
For r = 1 To nP
If supplierCategoryP(r) <> "null" And Not IsEmpty(supplierCategoryP(r)) Then
Cells(9 + k, 5) = supplierCategoryP(r)
k = k + 1
countNoNull = countNoNull + 1
End If
Next r
End If
创建数组的代码:
Worksheets("PEMCO").Activate
comNO = CLng(Range("commoditiesAmount").Text)
nP = CLng(Range("supplierAmount").Text)
ReDim supplierCategoryP(1 To nP) As String
For c = 1 To comNO
commodityLoop = Cells(3, 1 + c)
If commodity = commodityLoop Then
For r = 1 To nP
cellX = Cells(3 + r, 1 + c)
If cellX = "x" Then
supplierCategoryP(r) = Cells(3 + r, 1)
Else
supplierCategoryP(r) = "null"
End If
Next r
End If
Next c
答案 0 :(得分:2)
请注意,IsEmpty
函数对空字符串不起作用,它会测试空数值。您可以在“立即”窗格中验证这一点:
?IsEmpty("")
False
由于您的数组ReDim
为特定数量的项目,因此ReDim
语句将所有这些项初始化为空字符串。稍后,您使用单元格中的值或"null"
值分配(覆盖)某些项目。其他情况仍将保留vbNullString
初始化。
要检查空字符串,您需要测试supplierCategoryP(r) = vbNullString
(这是表达""
的内置常量)。
或者,如果您将空格或空格序列" "
视为空,则使用Trim
:
Trim(supplierCategoryP(r)) = vbNullString
另请注意,这可能看起来很迂腐,但重要的是:空数组与已初始化的包含“空”值的数组不同。您的数组永远不会为空,即使它只包含“空”(vbNullString
)值。