.FindPrevious не находит истинный предыдущий в excel userform

Я создаю пользовательскую форму в Excel, чтобы иметь возможность искать научные статьи на основе поисковых терминов, таких как «Имя автора». Моя пользовательская форма имеет кнопку cmdSearch («Поиск автора»), которая позволяет пользователю вводить имя автора и находить первую запись, соответствующую этому поиску. Затем из этой строки в файле Excel заполняются ящики управления, представляющие поля, такие как имена авторов, название, реферат и т. Д. Я попытался добавить в cmdNext кнопку cmdNext и cmdPrevious , чтобы продолжить поиск в каждой строке, имеющей то же имя автора, или вернуться к ранее просмотренной записи. Для этого я реализовал функцию цикла с использованием .find и .findnext для перехода вперед и .find и .findprevious чтобы вернуться назад. Чтобы остановить бесконечный цикл, я включил « Do While Not... Loop с кнопками «Продолжить дальше» и «Продолжить предыдущие», которые вы должны щелкнуть, чтобы просмотреть следующую запись. (Может быть, есть несколько более элегантный способ сделать это, но это не мой вопрос в настоящее время.)

Проблема, с которой я сталкиваюсь, заключается в том, что когда вы нажимаете кнопку cmdPrevious («Предыдущий»), вместо перехода к последней просмотренной записи (по-настоящему предыдущей записи) она переходит во вторую по последнюю запись в наборе данных. То, что я думаю, происходит в том, что .find находит последнюю запись в наборе данных, а .findprevious затем переходит к предыдущей записи. Ниже мой текущий код для цикла cmdPrevious . Может ли кто-нибудь предложить изменить мой код, чтобы найти его для поиска последней просмотренной записи?

Примечание : Я попытался использовать Worksheets("literature_format").Activate а затем After:= ActiveCell.Row чтобы я мог запустить мою команду .find после текущей строки, но это не работает (код не работает – ничего происходит, когда я нажимаю кнопку). Кроме того, если я использую MsgBox ActiveCell.Row чтобы увидеть, что он считает активной строкой, он всегда возвращает строку самой первой записи с именем этого автора. То есть, даже после того, как я начал искать вперед или назад, чтобы моя форма не отображала информацию из первой записи, ActiveCell.Row всегда возвращает тот же номер строки. Есть ли какой-то трюк, чтобы заставить это работать и заставить его обновить, что такое «активная строка», когда я перемещаюсь по набору данных?

Вот мой код для кнопки «Назад»:

 Private Sub cmdPrevious_Click() Dim data As Range Dim findrow As Range Dim prevrow As Range Dim ws As Worksheet Dim Search As String On Error Resume Next Set ws = Worksheets("literature_format") Set data = Sheet1.Range("H:H") Search = Me.txtSearch.Value If Search = "" Then MsgBox "Search for previous record" Else Set findrow = data.find(What:=Search, LookIn:=xlValues, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _ MatchCase:=False, SearchFormat:=False) If Not findrow Is Nothing Then Set prevrow = findrow Do Set findrow = data.FindPrevious(After:=findrow) If Not findrow Is Nothing Then If findrow.Address = prevrow.Address Then Exit Do Me.Control1.Value = findrow.Offset(0, 0) Me.Control2.Value = findrow.Offset(0, 3) Me.Control3.Value = findrow.Offset(0, 4) Me.Control4.Value = findrow.Offset(0, 15) Me.Control5.Value = findrow.Offset(0, 2) Me.Control6.Value = findrow.Offset(0, -7) Me.Control7.Value = "Name of author(s)" Do While Not bprevious DoEvents Loop bprevious = False End If Loop MsgBox "First record" Exit Sub End If End If End Sub 

Здесь, если мой код для кнопки «Продолжить предыдущий» (который останавливает бесконечный цикл) и использует общедоступную переменную As Boolean:

 Public bprevious As Boolean Private Sub cmdBackward_Click() 'used for continue previous loop bprevious = True End Sub 

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

Interesting Posts

Программно экспортировать таблицу запросов из MS Access в Excel с помощью C #

использование функции MID в функции входа в EXCEL

Проблема с написанием файла данных pandas для Excel

Ошибка 424 «Требуемый объект» при попытке вычислить количество используемых строк

База данных на основе таблицы с добавленным вручную столбцом – сохранение значений позиций

SUMIFS для текста и даты

найти интервал даты для уникального id excel

Формула сравнения формул Excel над последней ячейкой в ​​диапазоне

Java POI – вставка строк в виде столбцов

Как определить, содержит ли формула ячейки константы?

Excel десятичные места из MS Query

Функция для проверки того, являются ли два значения в столбце равными и если одно из их соответствующих значений строк равно

Использование расширенного фильтра с критериями

Два метода выбора листа 2 и нахождения последней используемой строки с помощью кнопки команды в листе 1 не выполняются

Проверьте, нет ли ячейки в excel пустой или пустой

Давайте будем гением компьютера.