Определение, является ли объект членом набора в VBA

60
задан ZygD 29 April 2019 в 06:49
поделиться

4 ответа

Ваш лучший выбор состоит в том, чтобы выполнить итерации по членам набора и видеть, если любое соответствие, что Вы ищете. Доверяйте мне, я должен был много раз делать это.

второе решение (который намного хуже) состоит в том, чтобы поймать "Объект не в наборе" ошибка и затем установить флаг, чтобы сказать, что объект не существует.

22
ответ дан Gilligan 24 November 2019 в 17:35
поделиться

Не точно изящный, но лучшее (и самый быстрый) решение, которое я мог найти, использовало OnError. Это будет значительно быстрее, чем повторение для любого среднего и крупного набора.

Public Function InCollection(col As Collection, key As String) As Boolean
  Dim var As Variant
  Dim errNumber As Long

  InCollection = False
  Set var = Nothing

  Err.Clear
  On Error Resume Next
    var = col.Item(key)
    errNumber = CLng(Err.Number)
  On Error GoTo 0

  '5 is not in, 0 and 438 represent incollection
  If errNumber = 5 Then ' it is 5 if not in collection
    InCollection = False
  Else
    InCollection = True
  End If

End Function
39
ответ дан Mark Nold 24 November 2019 в 17:35
поделиться

В Вашем конкретном случае (TableDefs), выполняющий итерации по набору и проверяющий Имя, хороший подход. Это в порядке, потому что ключ для набора (Имя) является свойством класса в наборе.

, Но в общем случае наборов VBA, ключ не обязательно будет частью объекта в наборе (например, Вы могли использовать Набор в качестве словаря с ключом, который не имеет никакого отношения к объекту в наборе). В этом случае у Вас нет выбора, кроме как пытаться получить доступ к объекту и зафиксировать ошибку.

2
ответ дан Joe 24 November 2019 в 17:35
поделиться

Isn't it good enough?

Public Function Contains(col As Collection, key As Variant) As Boolean
Dim obj As Variant
On Error GoTo err
    Contains = True
    obj = col(key)
    Exit Function
err:

    Contains = False
End Function
71
ответ дан 24 November 2019 в 17:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: