2012-11-20 75 views
0

我是Excel中VBA的新手,我有一个基本的用户表单,它将数据放入工作表中。来自表格的数据将在单元格B13到G13中输入,然后每隔一个条目在下一行完成。 B14-G14。通过Excel中的UserForm将数据输入到电子表格中

我有这样的代码已经但是它不是将数据输入正确的细胞,并重复输入它在同一行...

 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

您应该删除其他问题并在此处进行编辑。我给你的解决方案有什么问题?它做了你最初要求的 - 那么,改变了什么? – Jook

+0

@Jook,实现像这样的NextRow = Cells(Rows.Count,“A”)。End(xlUp).Row + 1',它应该总是进入下一行。 – CustomX

+0

@ t.thielemans我认为他的问题并没有进入下一行,但从第13行开始,然后到下一行获取更多数据。 – Jook

回答

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 

而且给你的方式有些explanaition:

不能使用(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中没有数据。

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

+0

+1也加入检查,以确保值不低于13;) – CustomX

+0

没有工作,它仍然只会把它放在同一个单元 – user1662306

+0

@ user1662306那么必须有别的东西,我测试了这个,工作正常。 – Jook

相关问题