在大小写选择语句中使用数组作为参数



根据某些信息,我的 excel 文件处于某种"状态"。例如,我们有一个服务的过程;(1(请求,(2(处理,(3(付款。 检查是否提供了所有信息后,函数返回 1 或 0。1 表示所有信息都存在,如果不存在,则为 0。

Dim Status(1 to 3) as Integer
CheckFunction(Request)
Status(1)= CheckFunction 'Return 1 
CheckFuntion(Process)
Status(2)= CheckFunction 'Return 1
CheckFuntion(Payment)
Status(3)= CheckFunction 'Return 0

现在我的数组看起来像这样

Status(1, 1, 0)

此文件现在应处于"正在处理"状态。 我想使用它,因此确定服务的当前状态,例如;

Select Case Status()
Case (1, 0, 0)
'Some code
Case (1, 1, 0)
'Some code
Case (1, 1, 1)
'Some code
End Select

但我无法让它正常工作。Iv总共获得了15种不同的状态,在我看来,这是最优雅的方式。

有人可以帮助我吗?

无法显式比较数组 - 因此下面的代码给出了类型不匹配(错误 13(:

Public Sub TestMe()            
Debug.Print Array(1, 2, 3) = Array(1, 2, 3)            
End Sub

因此,通过比较数组中的每个元素或通过其他一些业务逻辑来比较数组(例如,如果前 2 个元素相同或大小相同,则可以认为数组相等(。


最简单的解决方案可能是将数组转换为字符串,并将此字符串与另一个字符串进行比较。然后,这将起作用:

Public Sub TestMe()
Dim status As Variant: status = Array(1, 1, 0)
Select Case Join(status, "")
Case "100"
Debug.Print 100
Case "110"
Debug.Print 110
Case "111"
Debug.Print 111
End Select
End Sub

您也可以将值相加:

For each elem in status
statussum=statussum + elem
Next

然后做你的选择/案例:

SELECT CASE statussum
Case 1
Case 2
Case 3
End Select

此外,由于您似乎不太可能有001101011因此您可以在 SELECT 中检查数组的每个元素:

If Status(1) = 1 Then
...
ElseIf Status(2) = 1 Then
...
ElseIf Status(3) = 1 Then
...
End If

最后,在循环中,您可以检测状态。如果您确实有001011101的实例,这将很有帮助:

Dim statusCount as Integer, maxStatus as Integer
For each elem in Status
statusCount = statusCount + 1
if elem = 1 then maxStatus = statusCount
Next elem
Debug.print maxStatus 

最新更新