Я создал usrform в VBA, который позволяет пользователю вводить данные, извлекать их и изменять или удалять их без необходимости просматривать рабочий лист. Большая часть работает нормально, но есть одна проблема. При извлечении данных имеется кнопка «Далее» и «Назад», позволяющая просматривать данные, которые соответствуют либо номеру буровой установки двигателя, либо серийному номеру двигателя. Код в обоих случаях работает нормально, когда не установлен фильтр даты для сужения записей, он циклически проходит, и когда он достигает последней записи в любом направлении, он переходит к первой записи. Когда фильтр даты активирован, тогда работает предыдущая кнопка, и вы можете перемещаться по данным, а когда они достигают конца, они возвращаются к началу, но следующая кнопка этого не делает. Когда вы достигаете последней записи, она не зацикливается, а просто переходит в ошибку.
Private Sub nextbutton_Click()
Dim Rerow As Range
If Not rigretrieve = "" Then
Set Rerow = Worksheets("DW10 Data").Columns("H").Find(Codetext, searchdirection:=xlPrevious).Offset(, -6).SpecialCells(xlCellTypeVisible)
10
Set Rerow = Rerow.Offset(1, 0)
If Rerow = Rigtext Then
Rigtext.Text = Worksheets("DW10 Data").Cells(Rerow.Row, 2).Value
serialtext.Text = Worksheets("DW10 Data").Cells(Rerow.Row, 4).Value
hourstext.Text = Worksheets("DW10 Data").Cells(Rerow.Row, 5).Value
datetext.Text = Worksheets("DW10 Data").Cells(Rerow.Row, 3).Value
parttext.Text = Worksheets("DW10 Data").Cells(Rerow.Row, 6).Value
commentstext.Text = Worksheets("DW10 Data").Cells(Rerow.Row, 7).Value
Codetext.Text = Worksheets("DW10 Data").Cells(Rerow.Row, 8).Value
ElseIf Rerow = "" Then
Set Rerow = Worksheets("DW10 Data").Range("B:B").Find(rigretrieve, searchdirection:=xlNext)
If Rerow = Rigtext Then
Rigtext.Text = Worksheets("DW10 Data").Cells(Rerow.Row, 2).Value
serialtext.Text = Worksheets("DW10 Data").Cells(Rerow.Row, 4).Value
hourstext.Text = Worksheets("DW10 Data").Cells(Rerow.Row, 5).Value
datetext.Text = Worksheets("DW10 Data").Cells(Rerow.Row, 3).Value
parttext.Text = Worksheets("DW10 Data").Cells(Rerow.Row, 6).Value
commentstext.Text = Worksheets("DW10 Data").Cells(Rerow.Row, 7).Value
Codetext.Text = Worksheets("DW10 Data").Cells(Rerow.Row, 8).Value
Else: GoTo 10
End If
Else: GoTo 10
End If
Это та часть, которая просматривает серийный номер вышки двигателя, другая половина такая же, но ищет серийный номер двигателя. Что происходит, если вы находитесь на последней записи, вы получите Rerow = Nothing. Как я уже сказал, он работает нормально, если на месте нет фильтра даты, проблема возникает только тогда, когда фильтр работает. Предыдущая кнопка более или менее такая же, но смещена в другом направлении. Сейчас мы работаем над этим, отключив кнопку «Далее», когда фильтр включен, но я бы хотел, чтобы это работало правильно.