簡體   English   中英

在不激活工作表的情況下循環遍歷列並復制不斷變化的單元格范圍

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM