0

我是 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

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

提前致谢

4

1 回答 1

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),因为您要在 BG 列中添加数据,即 2-7。由于方式,您必须使用 2-7,您正在寻找最后一行。如果您使用 1,则当您尝试添加新数据时,您正在寻找 A 列中的最后一个值,该值不会改变。

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

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

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

于 2012-11-20T11:51:45.320 回答