2015-07-08 2 views
5

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

Я хочу найти последнее вхождение строки в диапазоне и сохранить адрес в переменной и отобразить сообщение, сообщающее мне, где оно находится.

До сих пор я это

Private Sub CmdBtnClockIt_Click() 
    Dim job As String 
    Dim searchTerm as Range 

    job = CmbBoxJob.Value 
    searchTerm = Range("A1:A999").find(what:=job, searchorder:=xlByColumns, searchdirection:=xlPrevious).Column 
    MsgBox "last cell is " & searchTerm.Address 
End Sub 

Все, что я, кажется, получают либо «недействительны классификатор» или «предметная переменная или переменная блока не установлена»

Любая помощь приветствуется

+5

SEARCHTERM является диапазон и должен быть установлен и не только назначены. 'Set searchTerm = ..... и т. Д.' – NickSlash

+2

Как упоминалось @NickSlash, вам нужно использовать Set для возврата диапазона. Также вы используете свойство .Column в конце, которое вернет номер столбца, а не диапазон. Вам нужно оставить поле. – Jane

+0

Почему у вас есть поиск Возврат столбца? Вы уже знаете, что это будет «1» (это столбец A). Просто удалите эту часть кода (.column). Затем просто установите «Установить» перед «searchTerm - Range (...», и вам будет хорошо идти. – BruceWayne

ответ

5

Первая проблема заключается в том, что searchTerm определяется как объект Range. Вы должны установить назначения объектов, используя Set keyword. Таким образом, задание становится Set searchTerm = Range("A1:A999")...

Во-вторых, вы ударите сообщения об ошибках, если searchTerm не найден, потому что searchTerm будет присвоено значение Nothing. Мы можем избежать этой проблемы, используя простое условие для проверки наличия job.

Поэтому ваш обновленный Sub может выглядеть примерно так:

Private Sub CmdBtnClockIt_Click() 
    Dim job As String 
    Dim searchTerm As Range 

    job = CmbBoxJob.Value 
    Set searchTerm = Range("A1:A999").Find(what:=job, searchorder:=xlByColumns, searchdirection:=xlPrevious) 
    If searchTerm Is Nothing Then 
    MsgBox "Text was not found" 
    Else 
    MsgBox "Last cell is " & searchTerm.Address 
    End If 
End Sub 
+0

Это помог немного, он продолжает возвращать «Текст не найден». Так что searchTerm не устанавливается – AshWood

+0

@AshWood: Попробуйте точку останова или «Задание MsgBox» после строки 'job = CmbBoxJob.Value'. Является ли значение ожидаемым? Либо 'CmbBoxJob.Value' не имеет вашего поискового запроса, либо его значение никогда не будет найдено в указанном вами диапазоне. – grovesNL

+0

Спасибо, я его окончательно отсортировал! Ваш ответ мне очень помог – AshWood

1

Как насчет:

Sub dural() 
    Dim job As String 
    Dim searchTerm As Range 
    job = "Happiness" 
    Set searchTerm = Range("A1:A999").Find(what:=job, after:=Range("A1"), searchorder:=xlByColumns, searchdirection:=xlPrevious) 
    MsgBox "last cell is " & searchTerm.Address 
End Sub 

enter image description here

Уведомление Я использовал .

+0

Это также дает мне ошибку из «переменной объекта или с переменной блока не задано» – AshWood

+0

Для моего кода и данных это означает, что нет * Счастье * в столбце ** A ** –

+0

Спасибо, ваш ответ помог мне указать в правильном направлении – AshWood

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