Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba xlDown未按预期工作_Vba_Excel - Fatal编程技术网

Vba xlDown未按预期工作

Vba xlDown未按预期工作,vba,excel,Vba,Excel,我遵循了教程 为了处理按钮动作。我希望每次单击按钮时都将数据写入新行,但代码要么覆盖现有数据,要么将数据写入新行(并再次覆盖) 代码: 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

我遵循了教程

为了处理按钮动作。我希望每次单击按钮时都将数据写入新行,但代码要么覆盖现有数据,要么将数据写入新行(并再次覆盖)

代码:

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

最好直接引用单元格,而不是选择单元格并引用
ActiveCell
。监视

看起来您正试图创建一个唯一标识符(ID)来引用您的记录。但是您正在将1添加到下面的空单元格中:
ActiveCell.Value=ActiveCell.Offset(
1
,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

如果要避免
激活
和逐个单元格的
偏移
,可能会更整洁,例如:

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)

我不能复制这个-代码对我来说很好,尽管使用实际引用而不是
ActiveCell
Offset
会更好。我不理解行
ActiveCell.Value=ActiveCell.Offset(1,0)。Value+1
。由于您使用的是
范围(“B2”).End(xlDown)
,因此这可能是列中的最后一个单元格。为什么要从下一个空行获取数据。除非您确定它不是空的如果您想获取列B中的最后一行,您可能应该使用
范围(“B”和Rows.Count).End(xlUp).Offset(1,0).选择
@nightcrawl23与您的解决方案一起工作。谢谢。实际上,在我的项目中是偏移量(-1,0)。值+1,当我在这里复制代码时,出现了一些错误。但它的行为仍然很奇怪,当并没有任何填充的数据时,它会写入第一行,然后继续覆盖它。@mgkP若您发布一个数据的屏幕截图,我将解释它为什么这样做。