excel用户窗体中导航期间达到限制的警报消息

excel用户窗体中导航期间达到限制的警报消息,excel,userform,vba,Excel,Userform,Vba,我正在使用以下代码从excel工作表中的表格数据填充userform,并尝试使用“下一步”和“上一步”按钮循环浏览表格中的以前条目,并且已成功完成。使用此代码,previous按钮选择上一行并将其加载到userform中。“下一步”按钮选择下一行并将其加载到userform中 问题:我只想将循环限制在表中(从工作表的第339行到第390行)。我想修复此代码以限制表的导航,并显示有关到达的第一条记录和最后一条记录的警报消息。我已成功修复并测试了“下一步”按钮的代码,但上一步按钮的代码不起作用 分享

我正在使用以下代码从excel工作表中的表格数据填充userform,并尝试使用“下一步”和“上一步”按钮循环浏览表格中的以前条目,并且已成功完成。使用此代码,previous按钮选择上一行并将其加载到userform中。“下一步”按钮选择下一行并将其加载到userform中

问题:我只想将循环限制在表中(从工作表的第339行到第390行)。我想修复此代码以限制表的导航,并显示有关到达的第一条记录和最后一条记录的警报消息。我已成功修复并测试了“下一步”按钮的代码,但上一步按钮的代码不起作用

分享整个代码供您审阅并提出建议,我们将不胜感激

Private Sub cmdGetNext_Click()

Range("B339").Select
ActiveCell.End(xlDown).Select
lastRow = ActiveCell.Row
currentrow = currentrow + 1
If currentrow = lastRow + 1 Then
    currentrow = lastRow
    MsgBox "You have reached the last entered data!"
End If

txtmeas.Text = Cells(currentrow, 2).Value
txtsource.Text = Cells(currentrow, 4).Value
cmbmatric.Text = Cells(currentrow, 6).Value

End Sub

Private Sub cmdPreviousData_Click()

currentrow = currentrow - 1
If currentrow > 1 Then
    txtmeas.Text = Cells(currentrow, 2).Value
    txtsource.Text = Cells(currentrow, 4).Value
    cmbmatric.Text = Cells(currentrow, 6).Value
ElseIf currentrow = 1 Then
    MsgBox "This is your first record!"
    currentrow = currentrow + 1
End If

End Sub

我将在模块级别定义一个常量,表示要设置的表的第一行:
Const TblFirstRow

然后,在下面,您可以使用
Range(“B339”)
而不是
Range(“B”&TblFirstRow)
,这将在将来进行更动态的修改

代码

Option Explicit

' define a variable at the module level, for first row of the table
Const TblFirstRow   As Long = 339

Private Sub cmdGetNext_Click()

Dim LastRow As Long, CurrentRow As Long

' get last row (not skipping blank cells)
LastRow = Range("B" & TblFirstRow).End(xlDown).Row

If CurrentRow + 1 > LastRow Then
    CurrentRow = LastRow
    MsgBox "You have reached the last entered data!"
Else
    CurrentRow = CurrentRow + 1
End If

txtmeas.Text = Cells(CurrentRow, 2).Value
txtsource.Text = Cells(CurrentRow, 4).Value
cmbmatric.Text = Cells(CurrentRow, 6).Value

End Sub

'================================================================

Private Sub cmdPreviousData_Click()

If CurrentRow - 1 < TblFirstRow Then
    CurrentRow = TblFirstRow
    MsgBox "This is your first record!"
Else
    CurrentRow = CurrentRow - 1
End If

txtmeas.Text = Cells(CurrentRow, 2).Value
txtsource.Text = Cells(CurrentRow, 4).Value
cmbmatric.Text = Cells(CurrentRow, 6).Value

End Sub
选项显式
'在模块级别为表的第一行定义变量
常数TblFirstRow,长度=339
私有子cmdGetNext_Click()
将最后一行变长,当前行变长
'获取最后一行(不跳过空白单元格)
LastRow=范围(“B”和TblFirstRow).End(xlDown).Row
如果CurrentRow+1>LastRow,则
CurrentRow=LastRow
MsgBox“您已到达上次输入的数据!”
其他的
CurrentRow=CurrentRow+1
如果结束
txtmeas.Text=单元格(当前行,2).Value
txtsource.Text=单元格(CurrentRow,4).Value
cmbmatric.Text=单元格(当前行,6).Value
端接头
'================================================================
Private Sub cmdPreviousData_Click()
如果当前行-1
我会将“elseif currentrow=1”更改为“else”


如果从currentrow=1的位置开始并运行cmdPreviousData_Click(),则在第一行(currentrow=currentrow-1)中将currentrow的值从1减小到0。那么您的if语句不会运行,因为0不是>1,您的elseif也不会运行,因为0是1。

您测试过我下面回答中的代码了吗?有什么反馈吗?嗨,谢,是的,我试过了,但没有解决问题。我在这里共享的代码是完全功能和工作的,唯一的问题是它没有停止在我的表的第一个rom上,而是继续移动到前面的行。但对于下一个数据按钮,它工作得非常好,并显示消息。所以唯一的办法就是把它限制在第一排。为了更清楚,我在不同的行上有多个表,并在每个表中应用相同的代码。如果您在从第1行(A1)开始的表格上尝试此代码,则此代码适用于两个方向(上一个和下一个),但不适用于其他表格。感谢您的时间和帮助Shai Rado!嗨,查尔斯,我试过了,但没用。请参阅我对Shai Rado解决方案的评论,其中我更详细地解释了我的问题。谢谢你的帮助!