【问题标题】:2loops in single workbook hence want to run loops based on sheets <> only单个工作簿中的 2 个循环因此只想基于工作表 <> 运行循环
【发布时间】:2015-12-04 16:03:35
【问题描述】:

我能够在所有工作表上正确运行此代码而没有任何问题,但我无法仅在特定工作表上运行代码。

我尝试使用 `if w.Name array("Summary", "-NonkeyRitemsgreaterthan180","Bus Jus R with Non-Jus Sub Type", "Close date" 像这样我有 20 张纸我不想在上面运行此代码但是它不起作用。如果有人可以在这方面指导或帮助我,那将是非常有帮助的,因为我正在为这些工作表运行另一个循环。

正确代码:

Dim w
Dim ws As Worksheet, i As Long
Dim cK As Long, cN As Long, cH As Long, cL As Long, cM As Long, cB As Long, cC As Long, LastR As Long
Dim sh, sM, sL, sB
Dim cY As Long, cT As Long, cR As Long
Dim sT, sR


Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Summary"
With Sheets("Summary")
    .Range("C3") = "Checks Performed"
    .Range("D3") = "No. Of Issues Found"
    .Range("E3") = "Key"
    .Range("F3") = "Non-Key"
    .Range("G3") = "High"
    .Range("H3") = "Medium"
    .Range("I3") = "Low"
    .Range("J3") = "Blanks"
    .Range("K3") = "High"
    .Range("L3") = "Medium"
    .Range("M3") = "Low"
    .Range("N3") = "Blanks"

    .Range("E2") = "Key /Non-Key "
    .Range("G2") = "Count"
    .Range("K2") = "Sum"
    .Range("E2:F2").Merge
    .Range("G2:J2").Merge
    .Range("K2:N2").Merge
End With

i = 4
For Each w In Worksheets
If w.Name <> "Summary" Then
    With w
        LastR = .Cells(Rows.Count, 1).End(xlUp).Row 'added lineššššššššššššššššššššššššššš
        cK = WorksheetFunction.CountIf(.Range("B:B"), "Key")
        cN = WorksheetFunction.CountIf(.Range("B:B"), "Non-Key")
        cH = WorksheetFunction.CountIf(.Range("L:L"), "High")
        cM = WorksheetFunction.CountIf(.Range("L:L"), "Medium")
        cL = WorksheetFunction.CountIf(.Range("L:L"), "Low")
        'cB = WorksheetFunction.CountIf(.Range("L:L"), " ")
        cB = WorksheetFunction.CountIf(.Range(.Range("L2"), .Cells(LastR, 12)), "") 'changed line
        sh = WorksheetFunction.SumIf(.Range("L:L"), "High", .Range("N:N"))
        sM = WorksheetFunction.SumIf(.Range("L:L"), "Medium", .Range("N:N"))
        sL = WorksheetFunction.SumIf(.Range("L:L"), "Low", .Range("N:N"))
        sB = WorksheetFunction.SumIf(.Range("L:L"), "", .Range("N:N"))
        cC = WorksheetFunction.CountA(.Range("A2:A100000"))
    End With
    With Sheets("Summary")
        .Cells(i, 3).Value = w.Name
        .Cells(i, 4).Value = cC
        .Cells(i, 5).Value = cK
        .Cells(i, 6).Value = cN
        .Cells(i, 7).Value = cH
        .Cells(i, 8).Value = cM
        .Cells(i, 9).Value = cL
        .Cells(i, 10).Value = cB
        .Cells(i, 11).Value = sh
        .Cells(i, 12).Value = sM
        .Cells(i, 13).Value = sL
        .Cells(i, 14).Value = sL
        i = i + 1
    End With
End If

下一个

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    使用Select Case

    For each w in Worksheets
        Select Case w.Name
            Case Is = "Summary", "-NonkeyRitemsgreaterthan180","Bus Jus R with Non-Jus Sub Type", "Close date" '... add more as needed
            Case Else
                '... execute code
        End Select
    Next
    

    另一个可能更易于管理的选项是将所有工作表名称加载到电子表格中的 Named Range 中,并针对命名范围进行测试。

    For each w in Worksheets
        If Sheets("Sheet1").Range("SkipSheets").Find(What:=w.Name, lookat:=xlWhole) is Nothing Then 
           'execute code ...
        End If
    Next
    

    假设SkipSheets的命名范围位于Sheet1

    【讨论】:

    • 谢谢你,Scott :) 会试试这个,祝你周末愉快!!
    • 谢谢 Scott Holtzman 它解决了我尝试了第一个它解决的问题,即使当前文件中没有任何工作表,因为我尝试了不应该考虑的工作表列表。 .
    • 太棒了 @suresh7860 - 如果确实如此,请标记为已回答!
    猜你喜欢
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 2016-11-25
    相关资源
    最近更新 更多