这里的这一行是错误的:
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 中没有数据。
希望这有助于理解这里的动态。