如何创build能够在Excel模型更新并且目标单元格的位置发生更改时自动更新范围位置的代码?

我在Excel VBA中创build了macros来执行迭代操作。 此代码的目的是将包含公式的一个单元格区域的值粘贴到另一个区域。

在这段代码中,我已经指定了范围的位置(对于被复制的和被粘贴的)。

在修改Excel模型期间,我更改行数或列数(通过添加或删除),从而更改单元格范围的实际位置。 举个例子,以前的Range(“N786:BT786”)可以变成Range(“N650:BT650”)。

我当然会很感激,如果你能帮我修改我的代码,使得范围不会被固定到静态位置,而是在模型本身被更新时自动更新。

先谢谢你。

下面你可能会发现我的代码。

Option Explicit Sub calculations_update() Application.DisplayStatusBar = False Application.ScreenUpdating = False Dim StartTime As Double Dim SecondsElapsed As Double StartTime = Timer Do While i < 95 i = i + 1 ThisWorkbook.Worksheets("Electrity").Activate Range("N786:BT786").Value = Range("N787: BT787").Value Range("R826:BT826").Value = Range("R827: BT827").Value ThisWorkbook.Worksheets("Efficiency").Activate Range("H814").Value = Range("H815").Value Range("H826").Value = Range("H827").Value Range("H846").Value = Range("H847").Value Loop SecondsElapsed = Round(Timer - StartTime, 2) MsgBox "The update was successful in " &SecondsElapsed& " seconds", bInformation End Sub 

为了避免在代码中使用静态单元格地址,通常最好将名称分配给相关的单元格(使用Excel中的公式/名称pipe理器),然后在代码中使用这些名称。

假设您为您的范围指定了名称(带有“Workbook”范围),如下所示:

 Range Name Electricity!$N$786:$BT$786 DstRng1 Electricity!$N$787:$BT$787 SrcRng1 Electricity!$R$826:$BT$826 DstRng2 Electricity!$R$827:$BT$827 SrcRng2 Efficiency!$H$814 DstRng3 Efficiency!$H$815 SrcRng3 Efficiency!$H$826 DstRng4 Efficiency!$H$827 SrcRng4 Efficiency!$H$846 DstRng5 Efficiency!$H$847 SrcRng5 

(显然,如果你喜欢,你可以使用更有意义的名字)

可以使用下面的代码:

 Option Explicit Sub calculations_update() Application.DisplayStatusBar = False Application.ScreenUpdating = False Dim StartTime As Double Dim SecondsElapsed As Double Dim i As Long StartTime = Timer Do While i < 95 i = i + 1 Range("DstRng1").Value = Range("SrcRng1").Value Range("DstRng2").Value = Range("SrcRng2").Value Range("DstRng3").Value = Range("SrcRng3").Value Range("DstRng4").Value = Range("SrcRng4").Value Range("DstRng5").Value = Range("SrcRng5").Value Loop SecondsElapsed = Round(Timer - StartTime, 2) MsgBox "The update was successful in " & SecondsElapsed & " seconds", vbInformation Application.DisplayStatusBar = True Application.ScreenUpdating = True End Sub