#excel #vba
#превосходить #vba
Вопрос:
Как написать код на VBA?
Мне нужна Search
командная кнопка для поиска значения E2
, содержащего дату, в B:B
строке, которая также содержит значение даты, и выбора OFFSET(0,1)
ячейки В результате ?
Я получаю эту ошибку:
Объектная переменная или с неустановленной блочной переменной
Это код, который я использовал:
Private Sub btngo_Click() Dim thedate As String Dim fromlist As Range thedate = Range("E2").Value fromlist = Range("B6:B370") fromlist.Find(what:=thedate, after:=Range("B5"), LookIn:=xlValue, _ lookat:=xlWhole, searchorder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False).Select End Sub
Комментарии:
1. Какой код вы пробовали до сих пор? Где у вас с этим возникли проблемы? Пожалуйста, включите это в свой вопрос.
2. Ваш
Find()
не подходит, и поэтому он возвращаетсяNothing
— вы не можете позвонитьSelect
Nothing
3. 1)
fromlist = Range("B6:B370")
должно бытьSet fromlist = Range("B6:B370")
2)Set
Range
переменная дляFind
метода , затем проверьте, естьNothing
ли какие-либо совпадения перед вамиSelect
, напримерDim findList as Range
,Set findList = fromlist.Find(what:=thedate, LookIn:=xlValue, lookat:=xlWhole, searchorder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
,If Not findList Is Nothing Then [code for match found] Else [code for no match] End If
Ответ №1:
В первую очередь, fromlist = Range("B6:B370")
необходимо, чтобы перед ним поставили.
Set fromlist = Range("B6:B370")
fromlist
это диапазон, когда вы пытаетесь установить эту переменную, она возвращает объект и, следовательно, нуждается в НАБОРЕ … вам это нужно как минимум, и это должно устранить ошибку, которую вы видите.
Совет, однако, вам следует больше работать над своим .Find
подходом. Опять же, он возвращает объект, и если ничего не найдено, вы получите сообщение об ошибке. Вам следует проверить это.
Ответ №2:
Ваше предложение помогло мне найти код для того, что я хочу.
sub whatever() Cells.Find(What:=Worksheets("main").Range("E2"),After:=ActiveCell, _ LookIn:=xlValues,LookAt:=xlWhole,SearchOrder:=xlByRows,SearchDirection:=xlNext, _ MatchCase:=True,SearchFormat:=False).Offset(1, 0).Activate End Sub
Без Dim
, и Set
это прекрасно работает.