2016-12-10 126 views
3

我已经关注this教程xlDown按预期工作

为了处理按钮操作。我想每次都在新行上写数据,单击按钮时,代码覆盖现有数据或将数据写入新行(并再次覆盖它)。

代码:

Private Sub cmdUnesiUBazu_click() 
    Sheet1.Activate 

    Range("B2").End(xlDown).Offset(1, 0).Select ' want to start write from C2 cell 
    ActiveCell.Value = ActiveCell.Offset(-1, 0).Value + 1 

    ActiveCell.Offset(0, 1).Value = txtSifraOsobe.Value 
    ActiveCell.Offset(0, 2).Value = txtImeIPrezime.Value 
    ActiveCell.Offset(0, 3).Value = txtAdresa.Value 
    ActiveCell.Offset(0, 4).Value = cboGrad.Value 
    ActiveCell.Offset(0, 5).Value = cboDrzava.Value 
    ActiveCell.Offset(0, 7).Value = txtDatumRodjenja.Value 

    End Sub 
+0

我不能复制这一点 - 代码工作对我很好,但实际使用的参考,而不是'ActiveCell'的d'Offset'会更好。 – Comintern

+0

我不明白'ActiveCell.Value = ActiveCell.Offset(1,0).Value + 1'这一行。由于您正在使用'Range(“B2”)。End(xlDown)',这可能是列中的最后一个单元格。为什么要从下一个空行取数据。除非你确定它不是空的 – nightcrawler23

+3

如果你想得到列B中的最后一行,你应该使用'Range(“B”&Rows.Count).End(xlUp).Offset(1,0).Select' – nightcrawler23

回答

2

最好是指细胞直接,而不是选择他们并参照ActiveCell。手表Excel VBA Introduction Part 5 - Selecting Cells (Range, Cells, Activecell, End, Offset)

它看起来像你试图使一个唯一的标识符(ID)引用你的记录。上述ActiveCell.Value = ActiveCell.Offset(-1, 0).Value + 1

Sheet1.Activate 

With Range("B2").End(xlDown).Offset(1, 0) 
    .Value = .Offset(-1, 0).Value + 1 
    .Offset(0, 1).Value = txtSifraOsobe.Value 
    .Offset(0, 2).Value = txtImeIPrezime.Value 
    .Offset(0, 3).Value = txtAdresa.Value 
    .Offset(0, 4).Value = cboGrad.Value 
    .Offset(0, 5).Value = cboDrzava.Value 
    .Offset(0, 7).Value = txtDatumRodjenja.Value 
End With 
+0

实际上,在我的项目中显示Offset(-1,0).Value + 1,当我在这里复制代码时出现错误。但它仍然很奇怪,并且当没有任何填充数据时,它会写入第一行,然后它会覆盖它。 – MGKP

+0

@MGKPIf您发布数据的屏幕截图我会解释为什么它正在做它正在做的事情。 –

1

ActiveCell.Value = ActiveCell.Offset(, 0).Value + 1相反,你应该加1单元格的值。如果将更为整洁,避免:但是您要添加1到下面的空白单元格Activate和细胞通过细胞Offsets,即可能是:

Dim ws As Worksheet 
Dim rng1 As Range 

Set ws = Sheets(1) 
Set rng1 = ws.Cells(Rows.Count, "B").End(xlUp) 
rng1.Offset(1, 1).Resize(1, 7) = Array(Me.txtSifraOsobe, Me.txtImeIPrezime, Me.txtAdresa, Me.cboGrad, Me.cboDrzava, , Me.txtDatumRodjenja)