在偏移量中使用 '
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=] 2003
和 A1048576
在 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
我有一些代码,谁能解释一下它是如何工作的以及为什么这样工作?具体这行代码:
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=] 2003
和 A1048576
在 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