Excel 在列中循环并复制不断变化的单元格范围,而无需激活图纸

Excel 在列中循环并复制不断变化的单元格范围,而无需激活图纸,excel,vba,loops,range,copy-paste,Excel,Vba,Loops,Range,Copy Paste,我试图复制一系列在循环中变化的单元格。然后将该范围粘贴到另一个工作簿中。我不想每次都激活工作表和工作簿。我的代码现在看起来像这样 For i = 1 to 5 Dim Frontiere As Workbook Set Frontiere = Workbooks("Frontiere.xlsx") Dim Summary as Workbook Set Summary = Workbooks("Summary.xlsx")

我试图复制一系列在循环中变化的单元格。然后将该范围粘贴到另一个工作簿中。我不想每次都激活工作表和工作簿。我的代码现在看起来像这样

For i = 1 to 5
Dim Frontiere As Workbook
Set Frontiere = Workbooks("Frontiere.xlsx")
Dim Summary as Workbook
Set Summary = Workbooks("Summary.xlsx")
                
            Dim Variables As Worksheet
            Set Variables = Frontiere.Worksheets("Variables")
            Dim Scenarios as Worksheet
            Set Scenarios = Summary.Worksheets("Scenarios")

        ' Copy new variable
                Scenarios.Range(Cells(7, i), Cells(57, i + 1)).Copy
                Variables.Cells(6, 12).PasteSpecial Paste:=xlPasteValues

Next i
当我尝试此操作时,我收到错误消息“对象的“工作表”的方法“范围”失败,出现在“场景.范围(单元格(7,I),单元格(57,I+1)).Copy”行中

我真的不想每次都激活工作表,因为我有大约20个其他范围要为每个循环复制和粘贴


谢谢

您可以在一行中声明工作簿和工作表以帮助清理。如果您需要引用工作簿属性,则此快捷方式可能不值得。您还应避免在循环中执行任何只需执行一次的操作(即,无需连续
Dim
您的工作表变量,然后
将它们设置为每个循环内的同一张工作表)

我将sheet name变量调整为略短一些,这样引用就不会占用太多空间。您也可以使用

您的主要问题是不合格对象-这在跨多个工作簿和工作表工作时尤其如此。为避免活动工作表/工作表对代码产生任何影响,您应该确保所有对象都合格。即,所有工作表都合格于工作簿。所有范围和单元格对象都合格于工作表。您的问题是请检查
行中不合格的
单元格的两个实例

Sub Try()

Dim wsV As Worksheet: Set wsV = Workbooks("Frontiere.xlsx").Sheets("Variables")
Dim wsS As Worksheet: Set wsS = Workbooks("Summary.xlsx").Sheets("Scenarios")

Dim i As Long

For i = 1 To 5
    wsS.Range(wsS.Cells(7, i), wsS.Cells(57, i + 2)).Copy
    wsV.Cells(6, 12).PasteSpecial xlPasteValues
Next i

End Sub


有关不合格
单元格
错误的更多详细信息,请参见。简而言之,如果代码位于模块或“ThisWorkbook”中,您的
单元格
指向代码所在的工作表或活动工作表。听起来这两个工作表都不正确,因此,要在工作表不活动的情况下复制,您必须完全限定o对象。

您可以在一行中声明工作簿和工作表,以帮助清理一点。如果您需要引用工作簿属性,则此快捷方式可能不值得。您还应避免在循环中执行任何只需执行一次的操作(即,无需连续
Dim
您的工作表变量,然后
将它们设置为每个循环内的同一张工作表)

我将sheet name变量调整为略短一些,这样引用就不会占用太多空间。您也可以使用

您的主要问题是不合格对象-这在跨多个工作簿和工作表工作时尤其如此。为避免活动工作表/工作表对代码产生任何影响,您应该确保所有对象都合格。即,所有工作表都合格于工作簿。所有范围和单元格对象都合格于工作表。您的问题是请检查
行中不合格的
单元格的两个实例

Sub Try()

Dim wsV As Worksheet: Set wsV = Workbooks("Frontiere.xlsx").Sheets("Variables")
Dim wsS As Worksheet: Set wsS = Workbooks("Summary.xlsx").Sheets("Scenarios")

Dim i As Long

For i = 1 To 5
    wsS.Range(wsS.Cells(7, i), wsS.Cells(57, i + 2)).Copy
    wsV.Cells(6, 12).PasteSpecial xlPasteValues
Next i

End Sub


有关不合格
单元格
错误的更多详细信息,请参见。简而言之,如果代码位于模块或“ThisWorkbook”中,您的
单元格
指向代码所在的工作表或活动工作表。听起来这两个工作表都不正确,因此,要在工作表不活动的情况下复制,您必须完全限定o对象。

您可以简单地执行此操作以避免使用剪贴板:

wsV.Cells(6, 12).Value = Scenarios.Range(Cells(7, i), Cells(57, i + 1)).Value

您可以简单地执行此操作以避免使用剪贴板:

wsV.Cells(6, 12).Value = Scenarios.Range(Cells(7, i), Cells(57, i + 1)).Value

您正在粘贴到循环中的同一范围内。因此,即使您复制了5次,前4次也将被最后一次覆盖。是的,我尝试简单地复制真实代码。在真实代码中,我复制到相同的单元格中,但每个循环都在不同的工作簿中。您正在粘贴到循环中的同一范围内。因此,即使您复制了5次,也会将前4个将被最后一个覆盖。是的,我尝试简单地复制真实代码。在真实代码中,我复制在相同的单元格中,但每个循环都在不同的工作簿中。谢谢,它工作得很好!谢谢,它工作得很好!