@ Josua Schmid:
Я думаю, что код в вашем ответе может быть правильным, но может быть и неправильным.Ваша функция имеет параметр типа Variant, который затем сравнивается с каждым пользователем коллекции.Но что сравнивается на самом деле?В этом случае сравнивается элемент по умолчанию.Таким образом, первая проблема может возникнуть, если коллекция будет содержать элементы некоторого пользовательского класса, для которого не задан элемент по умолчанию.В этом случае объект ошибки 438 во время выполнения не поддерживает это свойство или метод будет вызван.Можно добавить элемент по умолчанию, но даже тогда он будет работать не так, как вам кажется, я боюсь.
Пример с диапазонами (для Range-Class Value - элемент по умолчанию, поэтому значения сравниваются).Может быть, это именно то, что вы хотели, но, возможно, нет.Поэтому, с моей точки зрения, лучше использовать «Ключ» для каждого элемента, добавленного в коллекцию, а затем попытаться получить этот элемент по его ключу.
Debug.Print col.item (r1.Address)'Значение A1
Или по индексу, если ключи не использовались:
Debug.Print col.item (1)' Значение A1
Sub test()
Dim col As New VBA.Collection
Dim r1 As Range
Dim r2 As Range
Dim r3 As Range
Set r1 = Range("a1")
Set r2 = Range("b1")
Set r3 = Range("c1")
r1 = "A1 Value"
r2 = "B1 Value"
r3 = "C1 Value"
col.Add r1, r1.Address
col.Add r2, r2.Address
col.Add r3, r3.Address
Debug.Print ExistsIn(r1, col)
Debug.Print ExistsIn(r2, col)
Debug.Print ExistsIn(r3, col)
Dim r4 As Range
Set r4 = Range("d1")
r4 = "A1 Value"
Debug.Print ExistsIn(r4, col)
End Sub
Вывод:
True
True
True
True