【问题标题】:Use of ' in offset在偏移量中使用 '
【发布时间】:2022-01-14 06:20:20
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: excel vba offset


    【解决方案1】:

    代码的思路是:“跳到A列使用的最后一行,往下走1行,把日期写进去。

    它的作用: (虚拟地)转到单元格 A1 并按(也虚拟地)Ctrl+Down 键。这会跳转到一列的最后一个使用的单元格 - 但前提是填充了多个单元格,否则它将跳转到工作表的 最后 行(在 Excel 中尝试这个以了解)。

    现在,如果您从工作表的最后一行偏移一行,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
    

    【讨论】:

      【解决方案2】:

      A2 中没有值时,它会给你一个错误,因为End(xlDown) 来自A1 将带你到Excel 中的最后一个单元格A65536 2003 和Excel 中的A1048576 @987654330 @。这就像选择单元格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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-11
        • 1970-01-01
        • 2017-12-26
        • 2017-04-12
        • 2013-05-31
        • 2014-03-05
        • 2014-02-04
        • 1970-01-01
        相关资源
        最近更新 更多