此代码适用于单张,现在我尝试让它在多张纸上工作,避免前两张(“AA”和“单词频率”)。
原始代码here(参见@ Jeeped的回答)
链接到工作表here
尝试调整我找到的相关主题的代码(参考1,2),但我不知道如何(以及是否)应用Ws.Name
和{{1} }对象到我现有的代码中。
似乎代码使用Ws.Range
激活了Sheet1,我试图用以下方法替换它:
通过GroupCounter()创建With Worksheets("Sheet1")
循环函数,以确定有多少工作表,并在所有现有工作表中运行。每个工作表将使用变量“i”
For
循环 byGroupCounter()调用函数 byGroup(i)在所选工作表上运行原始代码(即工作表) “ I ”)
byGroup()函数在工作表 i 中运行它的进程。
我相信我收到错误的部分:将For
代码替换为With Worksheets("Sheet1")
,其中With Ws
和 Sheet_Index 等于 i ,由Ws = Worksheets(Sheet_Index)
我相信我必须在byGroupCounter()
前添加Ws
前缀,但我一直在尝试的一切,我不断收到错误“无法在中断模式下执行代码”。
当前代码:
.Range
答案 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