让我的脚本在所有工作表中运行(Excel)

时间:2016-01-21 02:56:05

标签: excel vba excel-vba

此代码适用于单张,现在我尝试让它在多张纸上工作,避免前两张(“AA”和“单词频率”)

原始代码here(参见@ Jeeped的回答)

链接到工作表here

尝试调整我找到的相关主题的代码(参考12),但我不知道如何(以及是否)应用Ws.Name和{{1} }对象到我现有的代码中。

似乎代码使用Ws.Range激活了Sheet1,我试图用以下方法替换它:

  1. 通过GroupCounter()创建With Worksheets("Sheet1")循环函数,以确定有多少工作表,并在所有现有工作表中运行。每个工作表将使用变量“i”

  2. 递增
  3. For循环 byGroupCounter()调用函数 byGroup(i)在所选工作表上运行原始代码(即工作表) “ I ”)

  4. byGroup()函数在工作表 i 中运行它的进程。

  5. 我相信我收到错误的部分:For代码替换为With Worksheets("Sheet1"),其中With Ws Sheet_Index 等于 i ,由Ws = Worksheets(Sheet_Index)

  6. 定义

    我相信我必须在byGroupCounter()前添加Ws前缀,但我一直在尝试的一切,我不断收到错误“无法在中断模式下执行代码”。

    当前代码:

    .Range

1 个答案:

答案 0 :(得分:1)

原始代码只有6次更改以循环显示工作表

我让他们评论'<<<

Sub byGroup()
    Dim g As Long, s As Long, aSTRs As Variant, aGRPs As Variant, sh As Worksheet    '<<<

    appTGGL bTGGL:=False
    For Each sh In Sheets    '<<<
        If sh.Name <> "AA" And sh.Name <> "Word Frequency" Then    '<<<<
            With sh    '<<<
                aSTRs = .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp)).Value2
                With .Range(.Cells(1, 5), .Cells(Rows.Count, 1).End(xlUp).Offset(0, Application.Match("zzz", .Rows(1)) - 1))
                    .Resize(.Rows.Count, .Columns.Count).Offset(1, 0).ClearContents
                    aGRPs = .Cells.Value2
                End With

                For s = LBound(aSTRs, 1) To UBound(aSTRs, 1)
                    For g = LBound(aGRPs, 2) To UBound(aGRPs, 2)
                        If CBool(InStr(1, aSTRs(s, 1), aGRPs(1, g), vbTextCompare)) Then
                            aGRPs(s + 1, g) = aSTRs(s, 1)
                            Exit For
                        End If
                    Next g
                Next s

                .Cells(1, 5).Resize(UBound(aGRPs, 1), UBound(aGRPs, 2)) = aGRPs

            End With
        End If    '<<<<
    Next sh    '<<<
    appTGGL
End Sub

Public Sub appTGGL(Optional bTGGL As Boolean = True)
    Debug.Print Timer
    Application.ScreenUpdating = bTGGL
    Application.EnableEvents = bTGGL
    Application.DisplayAlerts = bTGGL
    Application.Calculation = IIf(bTGGL, xlCalculationAutomatic, xlCalculationManual)
End Sub