2014-10-17 87 views
1

以下是情况:在我的用户表单中,我有文本框,用户将在其中输入数据,当他们点击保存按钮时,数据将保存在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 
+0

为什么用户必须单独按下每个项目的按钮?为什么他们不能输入3个值并点击保存按钮? – cronos2546 2014-10-17 00:30:32

+0

感谢您的快速响应,因为我保存了不同的交易 – Istian 2014-10-17 00:43:45

+0

尽管使用** ActiveCell **是一种不好的做法,只要添加'If ActiveCell.Row> 5然后Range(“A3”) .Select' – PatricK 2014-10-17 01:27:38

回答

0

您可以创建一个私有变量来存储行索引在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

+0

真棒!这就是我正在谈论的,正是:)但你能否进一步解释选项显式? – Istian 2014-10-17 05:01:20

+0

我有最后一个问题,我可以指定行和单元格保存数据的位置?例如在“F4”中。感谢人 – Istian 2014-10-17 05:19:41

+0

@Istian:您想要在F4中保存哪些数据?用于“F4”的 – 2014-10-17 15:18:47