簡體   English   中英

復制粘貼效率和VBA中的一系列工作表

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

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