我是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
我将如何实现这一目标? (下面的行已有数据)
提前致谢
答案 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中没有数据。
希望这有助于理解这里的动态。