1

我有一个 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 ...)被解析为一个数组,并使用下一行的数据更新范围. 相反,“上一个”按钮将朝相反的方向移动(A3、B3、C3、D3...)。本质上,我想在工作表中上下导航,查看新文本框中每个单元格的整行。

我已经尝试过各种 VBA 组合(请记住,我是 VBA 新手,虽然确实有一些 Java 和 PHP 经验)。我的“下一个”按钮当前的代码具有以下代码。

Private Sub button_revri_next_Click()

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

谢谢...我知道你们比我聪明得多!

4

1 回答 1

0

你可以用它.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
于 2012-08-08T10:21:18.793 回答