在偏移量中使用 '

Use of ' in offset

我有一些代码,谁能解释一下它是如何工作的以及为什么这样工作?具体这行代码:

With Sheets("Sheet2")
    .Cells(1, 1).End(xlDown).Offset(1).Value = Format(Date, "dd/mm/yyyy")

现在我知道代码本身在 Cells(1,1) 中输出日期,并从底部偏移 1 每个后续条目。我不明白的是,为什么在 sheet 中,其中一个单元格被遮挡了?

然后代码就可以正常工作了。但是如果单元格 A2 没有 '-------- 它突然不再工作并给我 Application defined, object defined 错误。有人可以解释 '-------- 在这里做什么以及为什么使用它吗?

A2 中没有值时,它会给你一个错误,因为 End(xlDown) from A1 将带你到 A65536 中的最后一个单元格 A65536 35=] 2003A1048576 在 Excel 2007+。这就像选择单元格 A1 并手动按 End 键,然后再按 Down 箭头键。当然你不能从最后一个单元格偏移 down 因此你得到 Error 1004 - Application-defined or Object-defined error.

我推荐使用xlUp找到最后一行然后输入如图所示的数据HERE

这是一个例子

Dim lRow As Long

With Sheets("Sheet2")
    lRow = .Range("A" & .Rows.Count).End(xlUp).Row + 1

    .Cells(lRow, 1).Value = Format(Date, "dd/mm/yyyy")
End With

代码的思路是:“跳转到 A 列中使用的最后一行,向下移动 1 行并将日期写入其中。

它的作用: 转到(虚拟)单元格 A1 并按下(也虚拟)键 Ctrl+Down。这会跳转到一列中最后使用的单元格 - 但仅当填充了多个单元格时,否则它会跳转到 sheet 的 very last 行(尝试这个在Excel理解)。

现在,如果您从 sheet 的最后一行偏移一行,Excel 只能抱怨。

解决方法:改用.Cells(.rows.count, 1).End(xlUp)。这以相反的方式工作:转到最后一行并按 Ctrl+Up。有关如何查找上次使用的单元格的更多详细信息,请参阅 Error in finding last used cell in Excel with VBA

你还应该做的:
不要级联东西,使用中间变量,这有助于调试。
不要将日期写成字符串(format 将日期转换为字符串)。把日期写成日期,并设置单元格的数字格式。

With Sheets("Sheet2")
    Dim lastCell as Range
    Set lastCell = .Cells(.rows.count, 1).End(xlUp)
    lastCell.Offset(1).Value = Date
    ' If needed:
    ' lastCell.Offset(1).NumberFormat = "dd/mm/yyyy"
End With