[英]VBA Copy/paste static ranges to static ranges in dynamically built array of worksheets
[英]Copy-Paste Efficiency and an Array of Worksheets in VBA
我具有以下代碼,用於將一定范圍的單元格粘貼到工作表數組中-並非全部:
dim ws as Worksheet
dim DecisionWorksheets
dim myPassword as String
dim copyrange
dim wf as WorksheetFunction
Set wf = Application.WorksheetFunction
Set DecisionWorksheets = Sheets(Array("ADMIN", "LM", "CA", "FM", "GD"))
For Each ws In DecisionWorksheets
ws.Unprotect myPassword
ws.Cells.ClearContents
Next ws
rownum = wf.Max(Range("B:B"))
copyrange = Worksheets("Data").Range(Cells(4, 2), Cells(rownum + 3, 6)).Copy
For Each ws In DecisionWorksheets
ws.Range("B7").PasteSpecial xlPasteValues
Next ws
For Each ws In DecisionWorksheets
ws.Protect myPassword
Next ws
上面數組中的每個工作表均受密碼保護,如果我在第二個循環中放入“ ws.Unprotect myPassword”,則會禁用剪切復制模式。 因此,我創建了一個單獨的“ for each”循環,該循環將首先通過一系列工作表來取消保護它們(第一個循環),然后再次保護它們(第三個循環)。
我的問題是關於代碼的效率。 即,我只是想知道是否有任何方法可以將這三個循環組合成一個循環。 任何其他建議也將不勝感激!
我認為粘貼代碼最初不適用於您,因為您正在清除循環中取消復制模式的工作表單元格。 如果您復制范圍,然后轉到另一個工作表並刪除單元格,則不再復制這些單元格。 清除單元格后,您可能必須復制並粘貼。 看這個例子。
Sub Button1_Click()
Dim ws As Worksheet
Dim DecisionWorksheets
Dim myPassword As String
Dim sh As Worksheet, LstRw As Long, CopyRng As Range
myPassword = "123"
Set DecisionWorksheets = Sheets(Array("ADMIN", "LM", "CA", "FM", "GD"))
Set sh = Sheets("Data")
With sh
LstRw = .Cells(.Rows.Count, "A").End(xlUp).Row
Set CopyRng = .Range(.Cells(4, 2), .Cells(LstRw + 3, 6))
End With
Application.ScreenUpdating = 0
For Each ws In DecisionWorksheets
ws.Unprotect myPassword
ws.Cells.ClearContents
CopyRng.Copy
ws.Range("B7").PasteSpecial xlPasteValues
ws.Protect myPassword
Next ws
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.