【问题标题】:VBA Absolute Formula range changing when running a copy + Paste macro运行复制+粘贴宏时VBA绝对公式范围发生变化
【发布时间】:2012-12-07 03:16:35
【问题描述】:

我正在运行一个复制粘贴宏,但是当我运行它时,它会不断将我的公式范围更改为行的最后一行。

例如,我原来的 VLOOKUP 公式从 $D$2:$G$5000 查找,但是当我运行宏时,它会将其更改为 $D$2:$G$1254,其中 1254 是数据所在的最后一行。

这里是复制+粘贴功能:

Sub START1()

Dim shCurrentWeek As Worksheet
Dim shPriorWeek As Worksheet
Dim lr As Long

Set shCurrentWeek = ActiveWorkbook.Sheets("Current Week")
Set shPriorWeek = ActiveWorkbook.Sheets("Prior Week")
lr = shCurrentWeek.Range("A" & Rows.Count).End(xlUp).Row

'Copies Current Week into Prior Week and deletes Rows in Prior week

shCurrentWeek.Range("A4:X" & lr).Copy
shPriorWeek.Range("A2").PasteSpecial xlPasteValues
shPriorWeek.Range("A" & lr - 2 & ":A10000").EntireRow.Delete

End Sub

有什么想法吗?

【问题讨论】:

  • 删除行时,Excel 将自动调整引用已删除行的所有公式(即使它们使用绝对引用)。尝试清除行而不是删除它们。
  • 如果从 1254 到 5000 的行无论如何都会被删除,这有什么关系?查找仍然可以使用 1254 作为最后一个数据行,对吗?
  • 是的,但是我运行另一个插入新数据的宏,新数据可能会超过 1254 行,这是一个问题。

标签: vba excel excel-2007


【解决方案1】:

您可以使用INDIRECT() 函数,这样公式将始终引用您希望的行。这是一个简单的示例(请参阅this link 了解更多详细信息):

=SUM(INDIRECT("A1:A6"))

【讨论】:

    【解决方案2】:

    首先,您使用的是 pastevalues,因此您不会在第二页上获得任何公式,但您的错误在于代码的最后一行

    shPriorWeek.Range("A" & lr - 2 & ":A10000").EntireRow.Delete
    

    由于您的公式与您要删除的范围重叠,excel 会自动调整 vlookup 公式。

    我建议在粘贴值之前删除您的数据。

    *如果公式已经在页面上,则在阅读 cmets 后进行编辑,则此解决方案将不起作用,我将按照 tim 的建议使用 clearcontents。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      • 2018-09-27
      相关资源
      最近更新 更多