- 我必须根据项目列表检查一段用户输入;如果输入位于项目列表中,则以一种方式引导流程。如果没有,则将流量引导至另一个。
- 此列表在工作表本身上不可见;它必须在代码下进行混淆。
我想到了两种策略来做到这一点:
- 声明为
枚举
并检查输入是否是该枚举
的一部分,尽管我不确定其语法 - 我是否需要初始化enum
每次我想使用它? - 声明为数组并检查输入是否是该数组的一部分。
我想知道VBA在效率和可读性方面哪个更好?
最佳答案
您可以运行一个简单的数组测试,如下所示,将单词添加到单个列表中:
Sub Main1()
arrList = Array("cat", "dog", "dogfish", "mouse")
Debug.Print "dog", Test("dog") 'True
Debug.Print "horse", Test("horse") 'False
End Sub
Function Test(strIn As String) As Boolean
Test = Not (IsError(Application.Match(strIn, arrList, 0)))
End Function
或者,如果您想要进行更详细的搜索并返回子字符串匹配列表以供进一步工作,请使用Filter
。如果查找 dog
vFilter
返回以下内容
dog, dogfish
在这种特殊情况下,代码会检查 dog
是否完全匹配。
Sub Main2()
arrList = Array("cat", "dog", "dogfish", "mouse")
Debug.Print "dog", Test1("dog")
Debug.Print "horse", Test1("horse")
End Sub
Function Test1(strIn As String) As Boolean
Dim vFilter
Dim lngCnt As Long
vFilter = Filter(arrList, strIn, True)
For lngCnt = 0 To UBound(vFilter)
If vFilter(lngCnt) = strIn Then
Test1 = True
Exit For
End If
Next
End Function
关于vba - 检查一个值是否是列表的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21378974/