通过Excel中的UserForm将数据输入电子表格

时间:2012-11-20 11:40:58

标签: excel vba excel-vba excel-2010

我是Excel中的VBA新手,我有一个基本的用户表单,用于将数据放入工作表中。来自表格的数据是进入单元格B13到G13,然后每隔一个条目应该在下一行中完成,例如, B14-G14。

我已经有了这个代码,但它没有将数据输入到正确的单元格中,并且在同一行重复输入...

     Private Sub CommandButton1_Click()

Dim lngWriteRow As Long

Dim ws As Worksheet
Set ws = Worksheets("Sheet1")

lngWriteRow = ws.Cells(Rows.Count, 1) _
.End(xlUp).Offset(1, 0).Row

If lngWriteRow < 13 Then lngWriteRow = 13

    ws.Range("B" & lngWriteRow) = TextBox1.Value
    ws.Range("C" & lngWriteRow) = TextBox2.Value
    ws.Range("D" & lngWriteRow) = TextBox3.Value
    ws.Range("E" & lngWriteRow) = ComboBox1.Value
    ws.Range("F" & lngWriteRow) = TextBox4.Value
    ws.Range("G" & lngWriteRow) = ComboBox2.Value

End Sub

我将如何实现这一目标? (下面的行已有数据)

提前致谢

1 个答案:

答案 0 :(得分:5)

这一行错了:

lngWriteRow = ws.Cells(Rows.Count, 12) _
.End(xlUp).Offset(1, 0).Row

因为你指的是你没有改变的第12列 - 所以行保持不变。

改为使用

lngWriteRow = ws.Cells(Rows.Count, 2) _
.End(xlUp).Offset(1, 0).Row

编辑:

如果你想要初始偏移,要启动数据输入@第13行,请使用:

lngWriteRow = ws.Cells(Rows.Count, 2) _
.End(xlUp).Offset(1, 0).Row

if lngWriteRow < 13 then lngWriteRow = 13

您无法使用Offset(12,0),因为您每次都会使用它!

修改

为了清楚起见,当将代码粘贴为工作表宏并多次点击F5时,这里的工作空白表。所以,除非有解释,这有什么不对,我认为这个问题已经解决了。

Private Sub Test()

Dim lngWriteRow As Long

Dim ws As Worksheet
Set ws = Worksheets("Sheet1")

lngWriteRow = ws.Cells(Rows.Count, 2) _
.End(xlUp).Offset(1, 0).Row

If lngWriteRow < 13 Then lngWriteRow = 13

    ws.Range("B" & lngWriteRow) = "test"
    ws.Range("C" & lngWriteRow) = "test"
    ws.Range("D" & lngWriteRow) = "test"
    ws.Range("E" & lngWriteRow) = "test"
    ws.Range("F" & lngWriteRow) = "test"
    ws.Range("G" & lngWriteRow) = "test"

End Sub

修改

经过一些邮寄,这是这个谜语的解决方案:没有说明,那些下面有填充的单元格,应该输入。

因此对于col-B来说更像是

title-row
row13
row..
row..
row63
space
other stuff

基本上建议的修正工作 - 但他们在整个工作表中寻找B列中最后一个填充的单元格,这就是问题所在。

以下是解决方案:

lngWriteRow = ws.Cells(ws.Range("B12:B63")Rows.Count, 2) _
.End(xlUp).Offset(1, 0).Row

并在路上给你一些解释:

您无法使用(Rows.Count,1)代替(Rows.Count,2),因为您要在B-G列中添加数据,即2-7。你必须使用2-7,因为你正在寻找最后一排。如果您使用1,那么当您尝试添加新数据时,您正在查找A列中的最后一个值,该值不会更改。

你不能使用Offset(12,0),因为这会在你每次插入数据时产生一个偏移量 - 所以最终你会得到12行的行。

最后,您无法使用Rows.Count,因为这是65536左右,并且您在要添加的数据下方有数据。 End(xlUp)将从太远的地方查找,并停在B列的最后一个单元格中,其中包含数据 - 但这不是B13,除非B14-B65536中没有数据。

希望这有助于理解这里的动态。