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个将被最后一个覆盖。是的,我尝试简单地复制真实代码。在真实代码中,我复制在相同的单元格中,但每个循环都在不同的工作簿中。谢谢,它工作得很好!谢谢,它工作得很好!