![](/img/trans.png)
[英]Loop through a range of cells in a worksheet and copy and paste to new sheet
[英]Loop through columns and copy a changing range of cells without activating the sheet
我正在嘗試復制一系列循環更改的單元格。 然后將該范圍粘貼到另一個工作簿中。 我不想每次都激活工作表和工作簿。 我的代碼現在看起來像這樣
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
當我嘗試這個時,我收到錯誤消息“對象'_Worksheet'的方法'范圍'失敗,來自“Scenarios.Range(Cells(7, i), Cells(57, i + 1)).Copy”行
我真的不想每次都激活工作表,因為我有大約 20 個其他范圍可以為每個循環復制和粘貼。
謝謝
您可以在一行中聲明工作簿和工作表,以幫助清理一下。 如果您需要引用工作簿屬性,則此快捷方式可能不值得。 您還應該避免在循環中執行任何只需要執行一次的操作(即無需連續Dim
您的工作表變量,然后在每個循環內Set
它們設置為同一張表)
我將工作表名稱變量調整為更短一些,這樣引用就不會占用太多空間。 您也可以只使用With
塊。
您的主要問題是不合格的對象 - 在處理許多工作簿和工作表時尤其如此。 為避免活動工作表/書籍對代碼產生任何影響,您應該確保所有對象都是合格的。 IE 所有工作表都帶有工作簿。 所有范圍和單元格對象都使用工作表進行限定。 您的問題可能是.Copy
行中不合格的兩個Cells
實例。
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
可以在此解決方案中找到有關不合格Cells
錯誤的更多詳細信息。 簡而言之,如果您的代碼位於模塊或“ThisWorkbook”中,則您的Cells
指向代碼所在的工作表或活動工作表。 聽起來這些都不是正確的工作表,因此,要在工作表不活動的情況下進行復制,您必須完全限定 object。
您可以簡單地這樣做以避免使用剪貼板:
wsV.Cells(6, 12).Value = Scenarios.Range(Cells(7, i), Cells(57, i + 1)).Value
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.