如何循环保存数据?

时间:2014-10-17 00:27:12

标签: vba excel-vba excel

情况如下:在我的userform中,我有文本框,用户将输入数据,当他们点击保存按钮时,数据将保存在excel sheet1中。

在sheet1中,我只会在保存数据时使用3行(“a3:a5”),这意味着当用户第一次点击保存按钮时数据将保存在“a3”行中,当再次点击保存按钮时第二次将数据保存在“a4”行中,第三次将数据保存在“a5”行中。

我想要做的是当用户再次点击保存按钮(a3:a5有值)时,数据将再次开始保存在a3行中,然后重复保存到a4和a5。

我认为循环是最好的方法,但我不知道该怎么做。请帮帮我。

这是我的示例代码,我唯一的问题是行中的循环过程(“a3:a5”),a2行包含标题

Private Sub btnadd_Click()

    Dim stecode As String
    Dim stename As String
    Dim adscode As String
    Dim adsname As String
    Dim added As String

    stecode = TextBox1.Text
    stename = TextBox2.Text
    adscode = TextBox3.Text
    adsname = TextBox4.Text
    added = TextBox5.Text

    '''''''''''''''''''''''''''''''''''''''''''
    Worksheets("Sheet1").Select
    Worksheets("Sheet1").Range("A2").Select

    If Worksheets("Sheet1").Range("A2").Offset(1, 0) <> "" Then
        ActiveCell.End(xlDown).Select
    End If

    ActiveCell.Offset(1, 0).Select
    ActiveCell.Value = stecode
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = stename
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = adscode
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = adsname
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = added

end sub

1 个答案:

答案 0 :(得分:0)

您可以创建一个私有变量来存储UserForm中的行索引,然后在将值写入工作表时引用该索引。初始化userform时,可以初始化变量。将值写入工作表后,您可以增加行索引并在写入第5行后将其重置为3.请参见下文。

Option Explicit

Private lRow As Long

Private Sub btnAdd_Click()
    Dim stecode As String
    Dim stename As String
    Dim adscode As String
    Dim adsname As String
    Dim added As String

    stecode = TextBox1.Text
    stename = TextBox2.Text
    adscode = TextBox3.Text
    adsname = TextBox4.Text
    added = TextBox5.Text

    '''''''''''''''''''''''''''''''''''''''''''
    Worksheets("Sheet1").Cells(lRow, 1).Value = stecode
    Worksheets("Sheet1").Cells(lRow, 2).Value = stename
    Worksheets("Sheet1").Cells(lRow, 3).Value = adscode
    Worksheets("Sheet1").Cells(lRow, 4).Value = adsname
    Worksheets("Sheet1").Cells(lRow, 5).Value = added

    If lRow = 5 Then
        lRow = 3
    Else
        lRow = lRow + 1
    End If

End Sub

Private Sub UserForm_Initialize()
    lRow = 3

End Sub

而且,如果你不想,你甚至不需要声明字符串变量。 btnAdd例程可以更紧凑地编写为:

Private Sub btnAdd_Click()

    With Worksheets("Sheet1")
        .Cells(lRow, 1).Value = TextBox1.Text
        .Cells(lRow, 2).Value = TextBox2.Text
        .Cells(lRow, 3).Value = TextBox3.Text
        .Cells(lRow, 4).Value = TextBox4.Text
        .Cells(lRow, 5).Value = TextBox5.Text
    End With

    If lRow = 5 Then
        lRow = 3
    Else
        lRow = lRow + 1
    End If

End Sub

Option Explicit用于强制显式声明模块中的所有变量。我认为这是一种很好的做法,它可以减少数据类型错误。您可以阅读更多here