VBA绝对公式范围在运行副本时发生更改+;粘贴宏

VBA绝对公式范围在运行副本时发生更改+;粘贴宏,vba,excel,excel-2007,Vba,Excel,Excel 2007,我正在运行“复制粘贴”宏,但当我运行它时,它会不断将公式的范围更改为最后一行 例如,我原来的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 = ActiveWork

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

例如,我原来的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
有什么想法吗?

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


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

shPriorWeek.Range("A" & lr - 2 & ":A10000").EntireRow.Delete
因为您要删除的公式与此范围重叠,excel会自动调整vlookup公式

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


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

删除行时,Excel将自动调整引用已删除行的任何公式(即使它们使用绝对引用)。尝试清除行而不是删除行。如果1254到5000之间的行仍被删除,这又有什么关系?当1254是最后一行数据时,查找仍然有效,对吗?是的,但我运行了另一个宏来插入新数据,新数据可能会超过1254行,这是一个问题。
shPriorWeek.Range("A" & lr - 2 & ":A10000").EntireRow.Delete