在Excel导航中达到极限的提示信息用户表格

问题描述:

我正在使用以下代码从Excel工作表中的表格数据填充用户表单,并尝试使用下一个和上一个按钮来循环访问表格中的先前条目并成功完成。使用此代码,上一个按钮选择上一行并将其加载到用户窗体中。下一个按钮选择下一行并将其加载到用户窗体中。在Excel导航中达到极限的提示信息用户表格

问题:我想限制循环仅限于表格(从工作表中的行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 
+0

您是否在下面的答案中测试了代码?任何反馈 ? –

+0

嗨Sha,是的,我试过了,但没有解决问题。我在这里分享的代码是完整的功能和工作,唯一的问题是它不会停在我的桌子上的第一个rom,但继续移动到前面的行。但对于下一个数据按钮,它工作得很好,并显示消息。所以唯一的办法是将其限制在第一行。为了更清楚地说明,我在不同的行上有多个表,并在每个表中应用相同的代码。如果您从第1行(A1)开始在表格上尝试此代码,则这对两个方向(上一个和下一个)都是完美的,但对于其余表格不适用。 – user7828601

+0

我感谢您的时间和协助Shai Rado! – user7828601

我会在模块级定义常量,表示要设置表的第一行: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 

我会改变 “ELSEIF currentrow = 1,则” 到 “其他”。

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

+0

嗨查尔斯,我试过了,但没有奏效。请参阅我对Shai Rado解决方案的评论,其中更详细地解释了我的问题。感谢你的协助! – user7828601