我有一个表格,我正在工作,将收集一组数据。我有文本框、组合框和几个选项按钮。我已经尝试了多种方法来创建正确的代码去到上一个记录和下一个记录,但我似乎不能让代码工作。我是新手,希望有人能帮忙。如果有帮助的话,我也可以把表格发过去。我尝试添加TraverseData来清理并使输入数据更容易。我似乎有下一个按钮的工作,但我不断得到1004错误与前一个按钮,循环回到TraverseData。我的代码在下面,任何帮助都非常感谢。
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
1条答案
按热度按时间46scxncf1#
欢迎来到SO。
你执行
Dim nCurrentRow As Long
,但没有给它赋值,所以默认值是0。然后你用
nCurrentRow = nCurrentRow - 1
做一个循环,所以nCurrentRow = -1
。结束循环的条件是:
Loop Until nCurrentRow = 1 Or Sheets(1).Cells(nCurrentRow, 1).Value = Me.txtname.Value
,这个条件永远不会为真。第一次执行
Do...Loop
时,nCurrentRow
的值是-1
,所以结束条件是:注意
Or
后面的部分。它调用了一个不可能的单元格(第-1行,第1列)。这是不可能的,因此VBA引发错误1004。