0

我在 excel 中有一个输入用户表单,用户将数据输入到三个不同的文本框中。这是我的代码

      Private Sub Process_Click()

     Worksheets("1").Range("A1").Value = Date.Value
     Worksheets("1").Range("B1").Value = Name.Value
     Worksheets("1").Range("C1").Value = Amount.Value


     End Sub

因此,当我第一次按下进程时,它会将数据写入这些单元格 A1、b1 和 C1。我想要做的是,每次我打开表单并单击表单上的进程时,我希望这些值向下排列,例如下次我单击进程时,它将转到 A2、b2 和 c2,等等在。

4

2 回答 2

2

这类似于 Barranka 的回答。

基本思想是一样的。您检查最后填充的行,并将数据附加到比该行低的一行。

此处用于查找最后填充的行的方法可能比使用while循环更有效,但您应该测试两者以亲自查看:

Private Sub Process_Click()
    Dim appendRow As Long

    ' add 1 to get the row after the last-populated row
    appendRow = Worksheets("1").Cells(Rows.Count,1).End(XlUp).Row + 1

    Worksheets("1").Range("A" & appendRow).Value = Date.Value
    Worksheets("1").Range("B" & appendRow).Value = Name.Value
    Worksheets("1").Range("C" & appendRow).Value = Amount.Value
 End Sub
于 2013-03-15T22:30:31.383 回答
0

首先,您需要知道哪个是最后填充的单元格。这可以通过导航范围轻松完成。假设所有三列都填充了数据,您只能读取其中一列(比如说A)来获​​取最后一行:

Dim i as Integer
i = 1
while Worksheets("1").Range("A" & i).Value <> "" or Worksheets("1").Range("A" & i).Value <> 0
    i = i + 1
wend

现在您知道最后一行填充了:

 Worksheets("1").Range("A" & i).Value = Date.Value
 Worksheets("1").Range("B" & i).Value = Name.Value
 Worksheets("1").Range("C" & i).Value = Amount.Value

这只是解决它的一种方法,如果您的数据集不是真的很大,它就可以工作。缺点是,如果您有一个很长的表,则while可能需要一些时间来跟踪最后填充的行。

希望这可以帮助你

于 2013-03-15T22:28:38.110 回答