1

80 行のワークシートの各行からデータを読み取り、各セルをテキスト ボックスに入力する Excel フォームがあります。

初期フォームのコードは次のとおりです。

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...) が配列に解析され、Range が次の行のデータで更新されます。 . 逆に、「前へ」ボタンは逆方向 (A3、B3、C3、D3...) に移動します。基本的に、ワークシートを上下に移動して、新しいテキスト ボックスの各セルで行全体を確認したいと考えています。

私は VBA のあらゆる種類の組み合わせを試しました (Java と PHP の経験はありますが、VBA は初めてです)。現在の「次へ」ボタンのコードには、以下のコードがあります。

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 に答える