Forms Excel VBA-使用';下一个';和';以前的';按钮

Forms Excel VBA-使用';下一个';和';以前的';按钮,forms,excel,rows,vba,Forms,Excel,Rows,Vba,我有一个Excel表单,它从80行工作表的每一行读取数据,并将每个单元格填充到文本框中 初始表单的代码如下所示 Private Sub UserForm_Initialize() txtbox_revri_idnum.Text = Worksheets("Risk&Issues").Range("A4").Value txtbox_revri_projname.Text = Worksheets("Risk&Issues").Range("B4").Value txtbox_r

我有一个Excel表单,它从80行工作表的每一行读取数据,并将每个单元格填充到文本框中

初始表单的代码如下所示

Private Sub UserForm_Initialize()

txtbox_revri_idnum.Text = Worksheets("Risk&Issues").Range("A4").Value
txtbox_revri_projname.Text = Worksheets("Risk&Issues").Range("B4").Value
txtbox_revri_isrefnum.Text = Worksheets("Risk&Issues").Range("C4").Value
txtbox_revri_riskrefnum.Text = Worksheets("Risk&Issues").Range("D4").Value
...
txtbox_revri_projname.SetFocus

End Sub
理想情况下,我想做的是,当按下“下一步”按钮时,下一行(A5、B5、C5、D5…)被解析为一个数组,并且使用下一行的数据更新范围。相反,“previous”(上一个)按钮将朝相反方向移动(A3、B3、C3、D3…)。基本上,我想在工作表上下导航,查看整行,每个单元格都在一个新的文本框中

我尝试过VBA的各种组合(请记住,我是VBA新手,虽然我有一些Java和PHP经验)。“下一步”按钮当前的代码如下所示

Private Sub button_revri_next_Click()

txtbox_revri_idnum.Text = ActiveCell.Next.Text
...
End Sub

谢谢你。。。我知道你们比我聪明多了

您可以使用
.Offset
实现您想要的功能

经过尝试和测试

Dim i As Long, j As Long
Dim rng As Range

Private Sub UserForm_Initialize()      
    Set rng = Worksheets("Risk&Issues").Range("A4")

    i = 0: j = 1

    txtbox_revri_idnum.Text = rng.Offset(i).Value
    txtbox_revri_projname.Text = rng.Offset(i, j).Value: j = j + 1
    txtbox_revri_isrefnum.Text = rng.Offset(i, j).Value: j = j + 1
    txtbox_revri_riskrefnum.Text = rng.Offset(i, j).Value: j = j + 1
    '
    '
    txtbox_revri_projname.SetFocus
End Sub

'~~> Next Button
Private Sub button_revri_next_Click()
    i = i + 1: j = 1

    If i > (Sheets("Risk&Issues").Rows.Count - 4) Then
        MsgBox "Max rows Reached"
        Exit Sub
    End If

    txtbox_revri_idnum.Text = rng.Offset(i).Value
    txtbox_revri_projname.Text = rng.Offset(i, j).Value: j = j + 1
    txtbox_revri_isrefnum.Text = rng.Offset(i, j).Value: j = j + 1
    txtbox_revri_riskrefnum.Text = rng.Offset(i, j).Value: j = j + 1
    '
    '  
    txtbox_revri_projname.SetFocus
End Sub
类似于上一个按钮

'~~> Previous Button
Private Sub button_revri_prev_Click()
    i = i - 1: j = 1

    If i < 0 Then
        MsgBox "1st Row Reached"
        Exit Sub
    End If

    txtbox_revri_idnum.Text = rng.Offset(i).Value
    txtbox_revri_projname.Text = rng.Offset(i, j).Value: j = j + 1
    txtbox_revri_isrefnum.Text = rng.Offset(i, j).Value: j = j + 1
    txtbox_revri_riskrefnum.Text = rng.Offset(i, j).Value: j = j + 1
    '
    '  
    txtbox_revri_projname.SetFocus
End Sub
“~~>上一个按钮
私有子按钮\u revri\u prev\u Click()
i=i-1:j=1
如果我<0,那么
MsgBox“到达第一行”
出口接头
如果结束
txtbox\u revri\u idnum.Text=rng.Offset(i).Value
txtbox\u revri\u projname.Text=rng.Offset(i,j)。值:j=j+1
txtbox\u revri\u isrefnum.Text=rng.Offset(i,j)。值:j=j+1
txtbox\u revri\u riskrefnum.Text=rng.Offset(i,j)。值:j=j+1
'
'  
txtbox\u revri\u projname.SetFocus
端接头

下一步单击处理程序应增加一个包含行号的变量,并调用一个函数读取该行的单元格以填充文本框。
prev_Click
处理程序应该同样地减少变量。在
initialize
函数中,设置变量并调用填充例程。问什么可能是愚蠢的问题,但如何捕获变量中的行号?然后把它和字母连在一起,例如B+row_num,C+row_num,……在实现上一个按钮时,我假设操作符是“-”,而下一个操作符是“+”。但是,在执行此操作时,我收到以下错误消息:运行时错误“1004”应用程序定义或对象定义错误调试指向最后一行代码:Private Sub button\u revri\u prev\u Click()I=I-1:j=1 txtbox\u revri\u idnum.Text=rng.Offset(I)。Value txtbox\u revri\u projname.Text=rng.Offset(I,j).Value:j=j-1 txtbox\u revri\u isrefnum.Text=rng.Offset(i,j)。Value:j=j-1 txtbox\u revri\u riskrefnum.Text=rng.Offset(i,j)。Value:j=j-1这是一个示例:)我已经更新了上面的代码以反映这些更改。非常感谢您,您能告诉我应该对代码做哪些更改吗,我会再试一次。这和我给出的代码是一样的,是基于你的Post1代码的。谢谢你-导航按钮工作正常!一个相关的问题,当我有单元格填充文本框,并且我对这些文本框进行了更改时,我想按下一个“更新”按钮,用文本框中的新内容更新单元格。。。我的代码如下:ActiveCell.Value=txtbox\u revri\u projname.Value ActiveCell.Offset(0,1)=txtbox\u revri\u isrefnum.Value ActiveCell.Offset(0,2)=txtbox\u revri\u riskrefnum.Value。。。不幸的是,它填充当前选定单元格所在的任何位置,而不是填充文本框的行。。。你能帮忙吗?