2016-10-11 2 views
2

мне нужно инкапсулировать Range.Find() в функции, так что имеет место следующее (R1, С1 и т.д., все определенные consts):VBA: Возвращение Range.Find результат() из функции

Function FindData(FindWhat As Variant) As Range 
    Dim TheR As Range 
    Set TheR = Range(Cells(R1, C1), Cells(R2, C2)).Find(FindWhat, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext) 
    FindData = TheR 
End Function 

Я передаю в строке, поэтому вызов, например:

Set FirstCell = Call FindData("MyValue") 

VBA блюет на линии FindData = TheR с сообщением Object variable or With block variable not set. Я попытался добавить этот if-блок:

, но это не имеет никакого значения. Как я могу вернуть значение, которое дает Find()?

ответ

2

Для переменных объекта вам нужно добавить ключевое слово Set, даже в функции! ;)

Так просто добавить, что в конце:

Function FindData(FindWhat As Variant) As Range 
    Dim TheR As Range 
    Set TheR = Range(Cells(R1, C1), Cells(R2, C2)).Find(FindWhat, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext) 
    Set FindData = TheR 
End Function 

И когда вы используете Call вы не получите выход из функции, поэтому вам нужно использовать круглые скобки:

Set FirstCell = FindData("MyValue") 
+0

О, дух! Я должен был осознать это! Большое спасибо :) – skiaddict1

+0

@ skiaddict1: У меня такая же проблема, когда я начал работать с объектами! ;) Пожалуйста, примите ответ, если ваша проблема решена;) – R3uK

+0

Извините, я забыл, только что сделал это сейчас :) – skiaddict1

Смежные вопросы