xlDown不按预期工作

我按照这个教程

为了处理button的动作。 我想每次都在新行写数据,点击button,但是代码要么覆盖现有的数据,要么写数据到一个新行(再次覆盖它)。

代码:

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 

最好是直接引用单元格,而不是select它们并引用ActiveCell 。 观看Excel VBA简介第5部分 – select单元(范围,单元,活动单元,结束,偏移)

它看起来像你试图做一个唯一的标识符(ID)来引用你的logging。 但是,您将下面的空单元格中添加1: ActiveCell.Value = ActiveCell.Offset( , 0).Value + 1而不是您应该将1添加到上面的单元格的值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 

如果要避免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)