【发布时间】:2016-07-07 13:59:47
【问题描述】:
Sub forEachWs()
Dim Ws As Worksheet
Windows("XYZSheet.xlsx").Activate
For Each Ws In ActiveWorkbook.Worksheets
Range("E1").Select
ActiveCell.FormulaR1C1 = "=SUM(C[-2])"
Range("D2").Select
ActiveCell.FormulaR1C1 = "=(RC[-1]/R1C5)"
Range("D2").Select
Selection.Copy
Range("D2:D2450").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Columns("D:D").Select
Range("D2").Activate
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Replace What:="0", Replacement:="", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next Ws
End Sub
代码不会循环访问表格中的其他选项卡 工作簿“XYZSheet.xlsx”,我似乎无法理解为什么。
从“Range(E1)”一直到“ReplaceFormat:=False”的中间代码都是经过录制的会话并进行了少量修改。
除了按 F8 循环浏览 VBA 代码外,我不完全了解 VBA 代码,所以请放轻松!
谢谢!
【问题讨论】:
-
是在粘贴吗?您的第二行应该在
.ActivateFor处分成两行,应该是.Activate,然后下一行从For开始...另外,我强烈建议您通读how to avoid.Select -
认为 for next 应该换行
-
您没有激活
For循环中的工作表,因此循环始终在同一张工作表上运行。这就是 @BruceWayne 所说的应该避免使用.Select的主要原因之一。