I have a form I am working on that will collect a set of data. I have text boxes, combo boxes, and a couple of option buttons. I have tried multiple ways to create the proper code to go to a previous record and to a next record but I cannot seem to get the code to work. I am new at this but hoping someone can assist. I can also e-mail the form over if that helps. I tried adding TraverseData to clean up and make it easier to input the data. I seem to have the next button working but I keep getting the 1004 error with the previous button that cycles back to the TraverseData. My code is below and any assistance is greatly appreciated.
Private Sub cmdprevious_Click()
Dim nCurrentRow As Long
Do
nCurrentRow = nCurrentRow - 1
TraverseData (nCurrentRow)
Loop Until nCurrentRow = 1 Or Sheets(1).Cells(nCurrentRow, 1).Value = Me.txtname.Value
If nCurrentRow = 1 Then
MsgBox "This is the last entry.", , "Alert!"
cmdprevious.Enabled = False
End If
End Sub
Private Sub Cmdnext_Click()
Dim nCurrentRow As Long
Do
nCurrentRow = nCurrentRow + 1
TraverseData (nCurrentRow)
Loop Until Sheet1.Cells(nCurrentRow, 1).Value = "" Or Sheet1.Cells(nCurrentRow, 1).Value =
Me.txtname.Value
End Sub
Private Sub TraverseData(nCurrentRow As Long)
Me.txtname.Value = Sheet1.Cells(nCurrentRow, 1)
Me.txtposition.Value = Sheet1.Cells("nCurrentRow, 2")
Me.txtassigned.Value = Sheet1.Cells(nCurrentRow, 3)
Me.cmbsection.Value = Sheet1.Cells(nCurrentRow, 4)
Me.txtdate.Value = Sheet1.Cells(nCurrentRow, 5)
Me.txtjoint.Value = Sheet1.Cells(nCurrentRow, 7)
Me.txtDAS.Value = Sheet1.Cells(nCurrentRow, 8)
Me.txtDEROS.Value = Sheet1.Cells(nCurrentRow, 9)
Me.txtDOR.Value = Sheet1.Cells(nCurrentRow, 10)
Me.txtTAFMSD.Value = Sheet1.Cells(nCurrentRow, 11)
Me.txtDOS.Value = Sheet1.Cells(nCurrentRow, 12)
Me.txtPAC.Value = Sheet1.Cells(nCurrentRow, 13)
Me.ComboTSC.Value = Sheet1.Cells(nCurrentRow, 14)
Me.txtTSC.Value = Sheet1.Cells(nCurrentRow, 15)
Me.txtAEF.Value = Sheet1.Cells(nCurrentRow, 16)
Me.txtPCC.Value = Sheet1.Cells(nCurrentRow, 17)
Me.txtcourses.Value = Sheet1.Cells(nCurrentRow, 18)
Me.txtseven.Value = Sheet1.Cells(nCurrentRow, 19)
Me.txtcle.Value = Sheet1.Cells(nCurrentRow, 20)
End Sub
Private Sub UserForm_Initialize()
Dim nCurrentRow As Long
Dim currentrow As Long
Dim lastrow As Long
txtname = Cells(nCurrentRow, 1)
txtposition = Cells(nCurrentRow, 2)
txtassigned = Cells(nCurrentRow, 3)
cmbsection = Cells(nCurrentRow, 4)
txtdate = Cells(nCurrentRow, 5)
txtjoint = Cells(nCurrentRow, 7)
txtDAS = Cells(nCurrentRow, 8)
txtDEROS = Cells(nCurrentRow, 9)
txtDOR = Cells(nCurrentRow, 10)
txtTAFMSD = Cells(nCurrentRow, 11)
txtDOS = Cells(nCurrentRow, 12)
txtPAC = Cells(nCurrentRow, 13)
ComboTSC = Cells(nCurrentRow, 14)
txtTSC = Cells(nCurrentRow, 15)
txtAEF = Cells(nCurrentRow, 16)
txtPCC = Cells(nCurrentRow, 17)
txtcourses = Cells(nCurrentRow, 18)
txtseven = Cells(nCurrentRow, 19)
txtcle = Cells(nCurrentRow, 20)
With UserForm1.cmbsection
.AddItem "Law Office Superintendent"
.AddItem "NCOIC, Legal Office"
.AddItem "NCOIC, Training & Readiness"
.AddItem "NCOIC, Military Justice"
.AddItem "NCOIC, Adverse Actions"
.AddItem "NCOIC, General Law"
.AddItem "NCOIC, International Law"
.AddItem "NCOIC, Civil Law"
.AddItem "NCOIC, Other"
.AddItem "Military Justice Paralegal"
.AddItem "General Law Paralegal"
.AddItem "International Law Paralegal"
.AddItem "Civil Law Paralegal"
.AddItem "Adverse Actions Paralegal"
.AddItem "Other see notes"
End With
With UserForm1.ComboTSC
.AddItem "B – initial upgrade to journeyman (5 level)"
.AddItem "C – initial upgrade to craftsman (7 level; SSgt-select or above)"
.AddItem "F – held prior 5 level; in upgrade to 5 level (retrainee)"
.AddItem "G – held prior 7 level; in upgrade to 7 level (retrainee SSgt-select or above)"
.AddItem "R – fully qualified"
.AddItem "Other see notes"
End With
With UserForm1.txtdate
txtdate.Value = Format(txtdate.Value, "dd/mm/yyyy")
End With
nCurrentRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
TraverseData (nCurrentRow)
End Sub
Welcome to SO.
You execute Dim nCurrentRow As Long
but you don't assign any value to it, so default value is 0.
And then you do a loop with nCurrentRow = nCurrentRow - 1
so nCurrentRow = -1
.
Your condition to end loop is:
Loop Until nCurrentRow = 1 Or Sheets(1).Cells(nCurrentRow, 1).Value = Me.txtname.Value
and that condition can never be true.
The first time your Do...Loop
executes, the value of nCurrentRow
is -1
so you condition to end is:
...Loop Until -1= 1 Or Sheets(1).Cells(-1, 1).Value = Me.txtname.Value...
Notice the part after the Or
. It's calling an impossible cell (row -1, column 1). That's not possible, so VBA raises error 1004.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.