Как передать столбец списка в функцию или подраздел?

#excel #vba #parameters

#excel #vba #параметры

Вопрос:

Мой код довольно прост, я ищу определенное слово в столбце с другого листа. Я создал функцию «find», которая возвращает True или false в зависимости от того, находит она это слово или нет. Функция поиска имеет два параметра: конкретный столбец на листе и слово, которое он ищет. Смотрите код ниже:

 Public Function FoundExp(expID As String, ByVal lsCol As listColumn) As Boolean

Dim exp As String
Dim listCol As ListColumn
exp = expID
Set listCol = lsCol


FoundExp = Not lsCol.Range.find(exp) Is Nothing 'changed per BigBen <--error thrown here

End Function
 

Когда я вызываю эту функцию из другого подраздела, я получаю сообщение об ошибке, в котором говорится, что объект не был установлен. Кроме того, когда я проверил тип данных, он отображается в виде строки.

Это вызывающая строка:

Есть идеи о том, что я делаю не так?

Редактировать: это может иметь какое-то отношение к тому, как я создаю экземпляр исходного столбца списка, который я передаю. Я вызываю функцию из отдельного подраздела, в данном случае в другом модуле, но конечная позиция подраздела будет в том же модуле, что и функция find .

Вызов sub выглядит так:

 Sub Foo()

Dim tbl2 as ListObject    
Dim lsCol as ListColumn
Set tbl2 = ws.ListObjects.("TableName")
Set lsCol = tbl2.ListColumns(2)

Debug.Print lsCol             'this reads column header text
Debug.Print VarType(lsCol)    'this reads as 8

FoundExp "foo", lsCol

End Sub
 

Комментарии:

1. Объекты всегда передавались по ссылке.

2. @user14797724 — неверно, распространенное заблуждение.

3. listCol.Range.find(exp) = True предполагается, что Find это успешно, что не обязательно так. Вам нужно проверить Find , удалось ли выполнить.

4. Вы не можете скопировать объект. Любая попытка просто увеличивает количество ссылок и возвращает тот же объект.

5. @BigBen Я, наконец, понимаю, что вы имеете в виду, когда говорите о необходимости проверить, удалось ли найти, используя логику If Not Is Nothing .