2012-12-06 61 views
0

我正在運行復制粘貼宏,但是當我運行它時,它會不斷將我公式的範圍更改爲最後一行。VBA絕對公式範圍在運行副本時發生變化+粘貼宏

例如,我的原始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 

什麼想法?

+3

當您刪除行時,Excel將自動調整引用已刪除行的任何公式(即使它們使用絕對引用)。嘗試清除行而不是刪除它們。 –

+0

如果從1254到5000的行無論如何都被刪除,爲什麼這很重要?查找仍然可以使用1254作爲最後一個數據行,對吧? –

+0

是的,但我運行另一個宏插入新的數據,新的數據可能會超過1254行,這是一個問題。 – kmiao91

回答

0

您可以使用INDIRECT()函數,這樣公式將始終引用您希望的行。這裏有一個簡單的例子(請參閱this link的方式更詳細的信息):

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

您正在使用pastevalues這樣你就不會得到你的第二頁上的任何公式,但你的錯誤在於最後一排開始您的代碼

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

由於您的公式與您正在刪除的此範圍重疊,Excel會自動調整vlookup公式。

我會建議在粘貼值之前刪除您的數據。

*閱讀評論後,如果公式已經在頁面上編輯,那麼這種解決方案將無法正常工作,我會使用clearcontents而不是tim的建議。