【问题标题】:Copy-Paste Efficiency and an Array of Worksheets in VBAVBA 中的复制粘贴效率和工作表数组
【发布时间】:2015-07-18 23:08:39
【问题描述】:

我有以下代码用于在工作表数组中粘贴特定范围的单元格 - 不是全部:

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”循环,它首先会通过一组工作表来取消保护它们(第一个循环),然后再次保护它们(第三个循环)。

我的问题是关于我的代码的效率。也就是说,我只是想知道是否有任何方法可以将这三个循环合并为一个循环。 任何其他建议也将不胜感激!

【问题讨论】:

  • @Davesexcel ,我认为复制代码并不那么重要,这就是我决定省略它的原因。尽管如此,我还是编辑了我的代码——现在,它有了复制代码。至于您的另一个问题,被复制的范围位于未受保护的工作表上。
  • @Davesexcel ,这段代码太长了,我无法全部展示。我错过了代码中“wf”的定义,对此感到抱歉。它是一个 WorksheetFunction(我已经为此编辑了我的代码)。至于那部分代码的一般描述,“B”列有一个从1到N的数字序列,当一些数据输入到工作表的“C”到“F”列时出现。例如,如果我输入两行某些信息,则“B”列将在单元格“B4”中具有数字“1”,在单元格“B5”中将具有数字“2”。因此,这部分代码将使复制范围从“B4”(“cells(4,2)”)下降一行。

标签: arrays loops excel vba


【解决方案1】:

我相信粘贴代码最初对您不起作用,因为您正在清除循环中取消复制模式的工作表单元格。 如果您复制一个范围然后转到另一个工作表并删除单元格,则您不再复制这些单元格。 清除单元格后,您可能需要复制和粘贴。看看这个例子。

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

【讨论】:

  • 感谢您的代码!如果我错了,请纠正我,但我相信循环内的 CopyRng.Copy 会复制数组中每张纸的范围。也许,我没有明确指定我只从一张表中复制数据(不过,这在我指定的复制代码中给出)然后将该范围复制到数组中的每张表中。
  • 是的,你错了。 CopyRng 仅来自数据表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多