我想在visual basic 6.0中检查集合变量是否包含密钥 下面是我正在收集的变量
pcolFields As Collection
我想检查它是否包含字段Event_Code。我这样做如下,但它对我不起作用。
If IsMissing(pcolFields("Event_Code")) = False Then
'Do Something
End If
答案 0 :(得分:3)
以下是try-catch的示例解决方案:
Private Function IsMissing(col As Collection, field As String)
On Error GoTo IsMissingError
Dim val As Variant
val = col(field)
IsMissing = False
Exit Function
IsMissingError:
IsMissing = True
End Function
像这样使用:
Private Sub Form_Load()
Dim x As New Collection
x.Add "val1", "key1"
Dim testkey As String
testkey = "key2"
If IsMissing(x, testkey) Then
Debug.Print "Key is Missing"
Else
Debug.Print "Val is " + x(testkey)
End If
Exit Sub
End Sub
您还可以尝试a实现或子类化集合并添加“has”函数
答案 1 :(得分:0)
如果需要检查是否存在,集合是没有用的,但它们对迭代很有用。但是,集合是Variants的集合,因此本质上比类型变量慢。
几乎在每种情况下,使用类型化数组都更有用(也更优化)。如果你需要一个键控集合,你应该使用Dictionary对象。
使用类型化数组的一般方法的一些示例:
Dim my_array() As Long ' Or whichever type you need
Dim my_array_size As Long
Dim index As Long
Dim position As Long
' Add new item (push)
ReDim Preserve my_array(my_array_size)
my_array(my_array_size) = 123456 ' something to add
my_array_size = my_array_size + 1
' Remove item (pop)
my_array_size = my_array_size - 1
If my_array_size > 0 Then
ReDim Preserve my_array(my_array_size - 1)
Else
Erase my_array
End If
' Remove item (any position)
position = 3 'item to remove
For index = position To my_array_size - 2
my_array(index) = my_array(index + 1)
Next
my_array_size = my_array_size - 1
ReDim Preserve my_array(my_array_size - 1)
' Insert item (any position)
ReDim Preserve my_array(my_array_size)
my_array_size = my_array_size + 1
For index = my_array_size - 1 To position + 1 Step -1
my_array(index) = my_array(index - 1)
Next
my_array(position) = 123456 ' something to insert
' Find item
For index = 0 To my_array_size - 1
If my_array(index) = 123456 Then
Exit For
End If
Next
If index < my_array_size Then
'found, position is in index
Else
'not found
End If
虽然它看起来像很多代码。它更快。 Intellisense也会起作用,这是一个奖励。唯一需要注意的是,如果你有非常大的数据集,那么redim开始变慢,你必须使用略有不同的技术。
您还可以使用Dictionary,确保在项目中包含Microsoft Scripting Runtime引用:
Dim dict As New Dictionary
Dim value As Long
dict.Add "somekey", 123456
dict.Remove "somekey"
value = dict.Item("somekey")
If dict.Exists("somekey") Then
' found!
Else
' not found
End If
像集合这样的字典只包含一堆变体,因此可以容纳对象等。
答案 2 :(得分:0)
如果Collection包含对象而不是原始类型,则efkah中的方法将失败。这是一个小调整:
'Test if a key is available in a collection
Public Function HasKey(coll As Collection, strKey As String) As Boolean
On Error GoTo IsMissingError
Dim val As Variant
' val = coll(strKey)
HasKey = IsObject(coll(strKey))
HasKey = True
On Error GoTo 0
Exit Function
IsMissingError:
HasKey = False
On Error GoTo 0
End Function
答案 3 :(得分:0)
我们可以将下面的代码校验成vb.net代码
如果 Collection.ContainsKey(KeyString) 那么
'写代码
如果结束
Collection 是Dictionary 的变量,KeyString 是我们需要在collection 中找到的关键字符串