Кнопка «Далее» и «Предыдущий» - нарушение моего психического состояния - PullRequest
0 голосов
/ 12 марта 2020

Я несколько дней пытался заставить следующую кнопку работать в форме Excel VBA. У меня есть форма с несколькими элементами, включая некоторые поля со списком. Я неоднократно пытался заставить код работать, чтобы я мог добавить кнопку следующего элемента и кнопку предыдущего элемента. Я хочу, чтобы эти кнопки просматривали данные таблиц и отображали предыдущий набор данных и следующий набор данных. В конечном итоге, их можно редактировать, как только кнопки сработают. Предыдущая кнопка возвращает меня к первому набору данных, но не циклически, а следующая кнопка вызывает ошибку объекта в коде имен строк (txt.name.text = ячейки (currentrow, 1). Любая помощь или помощь в получении этих кнопок на работу будет принята с благодарностью.

Private Sub cmdnext_Click()
  Dim lastrow As Long
  Dim currentrow As Long

lastrow = Sheet1.Cells(Rows.Count, 2).End(xlUp).Row

currentrow = currentrow + 2

txtname = Cells(currentrow, 1)
txtposition = Cells(currentrow, 2)
txtassigned = Cells(currentrow, 3)
cmbsection.Text = Cells(currentrow, 4)
txtdate.Text = Cells(currentrow, 5)
    txtjoint = Cells(currentrow, 7)
txtDAS.Text = Cells(currentrow, 8)
txtDEROS.Text = Cells(currentrow, 9)
txtDOR.Text = Cells(currentrow, 10)
txtTAFMSD.Text = Cells(currentrow, 11)
txtDOS.Text = Cells(currentrow, 12)
txtPAC.Text = Cells(currentrow, 13)
ComboTSC.Text = Cells(currentrow, 14)
txtTSC.Text = Cells(currentrow, 15)
txtAEF.Text = Cells(currentrow, 16)
txtPCC.Text = Cells(currentrow, 17)
txtcourses.Text = Cells(currentrow, 18)
txtseven.Text = Cells(currentrow, 19)
txtcle.Text = Cells(currentrow, 20)

If currentrow = lastrow Then
MsgBox "Why wont this work"
End If
End Sub

Private Sub CommandButton6_Click()
Dim lastrow As Long
 Dim currentrow As Long

 If lastrow = currentrow Then
   MsgBox "this doesn work yet"
 End If

 currentrow = currentrow - 2

 txtname.Text = Cells(currentrow, 1)
 txtposition = Cells(currentrow, 2)
 txtassigned = Cells(currentrow, 3)
 cmbsection.Text = Cells(currentrow, 4)
 txtdate.Text = Cells(currentrow, 5)
 txtjoint = Cells(currentrow, 7)
 txtDAS.Text = Cells(currentrow, 8)
 txtDEROS.Text = Cells(currentrow, 9)
 txtDOR.Text = Cells(currentrow, 10)
 txtTAFMSD.Text = Cells(currentrow, 11)
 txtDOS.Text = Cells(currentrow, 12)
 txtPAC.Text = Cells(currentrow, 13)
 ComboTSC.Text = Cells(currentrow, 14)
 txtTSC.Text = Cells(currentrow, 15)
 txtAEF.Text = Cells(currentrow, 16)
 txtPCC.Text = Cells(currentrow, 17)
 txtcourses.Text = Cells(currentrow, 18)
 txtseven.Text = Cells(currentrow, 19)
 txtcle.Text = Cells(currentrow, 20)

 End Sub

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Примерно так:

Dim currentrow As Long '<< you should set a value for this
                       '   when your form first loads

Private Sub LoadRow()
    With Sheet1.Rows(currentrow)
        txtname = .Cells(1)
        txtposition = .Cells(2)
        txtassigned = .Cells(3)
        '... etc etc
        txtcle.Text = .Cells(20)
    End With
End Sub

Private Sub cmdnext_Click()
    If currentrow < Sheet1.Cells(Rows.Count, 2).End(xlUp).Row Then
        currentrow = currentrow + 2
        LoadRow
    Else
        MsgBox "Already at end"
    End If
End Sub

Private Sub cmdPrev_Click()
    If currentrow > 2 Then
        currentrow = currentrow - 2
        LoadRow
    Else
        MsgBox "Already at top"
    End If
End Sub

Не нужно повторять весь этот код загрузки.

0 голосов
/ 12 марта 2020

Хорошо, я могу сказать вам, почему CommandButton6_Click не будет работать. Начальное значение для currentrow равно нулю, а затем вычтите два и используйте его в качестве индекса строки ячейки.

Использование Cells(-2, something) означает , а не , вероятно, закончится хорошо.


И теперь, когда я присмотрюсь, у вас возникла та же проблема с cmdnext_Click. Поскольку currentrow начинается с нуля при каждом запуске этой функции, и вы добавляете два к ней, вы всегда получаете Cells(2,something).


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...