【发布时间】: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)”)下降一行。