【问题标题】:Excel sheet loop command not workingExcel工作表循环命令不起作用
【发布时间】: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 的主要原因之一。

标签: excel vba loops worksheet


【解决方案1】:

你需要这样的东西:

Sub forEachWs()

Dim Ws As Worksheet
Windows("XYZSheet.xlsx").Activate
For Each Ws In ActiveWorkbook.Worksheets
    With Ws
        .Range("E1").FormulaR1C1 = "=SUM(C[-2])"
        .Range("D2").FormulaR1C1 = "=(RC[-1]/R1C5)"
        .Range("D2").Copy Destination:=Range("D2:D2450")
        .Columns("D:D").Value = Columns("D:D").Value
        .Columns("D:D").Replace What:="0", Replacement:="", LookAt:=xlWhole, SearchOrder:=xlByRows
    End With
Next Ws
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 2016-02-06
    • 1970-01-01
    • 2019-01-11
    相关资源
    最近更新 更多