首页 > 解决方案 > 做直到带排除的工作表循环

问题描述

在下面,宏将循环到工作表“XYZ”。在“XYZ”表之前有 10 个表。

在这 10 张工作表中,我不希望宏在工作表“XBA”和工作表“XBZ”上运行。

请帮忙。我无法为这种循环找到确切的 vba 代码。

Sub Fexp1()
Sheets("AAA").Activate
i = 4
Do Until ActiveSheet.Name = "XYZ"
If ActiveSheet.AutoFilterMode = True Then ActiveSheet.AutoFilterMode = False
    
    Dim sh As Worksheet
    Dim rng As Range

    Set sh = ActiveSheet

    sh.AutoFilterMode = False
    sh.Range("$A7:$M7").AutoFilter Field:=7, Criteria1:="x1"

    Rowz = sh.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1
    If Rowz <> 0 Then

    Dim rTable As Range
    Set rTable = ActiveSheet.AutoFilter.Range
    Set rTable = rTable.Resize(rTable.Rows.Count - 1)
    Set rTable = rTable.Offset(1)
    rTable.Copy
    Sheets("EXP1").Select
    Range("A1").Select
    ActiveCell.End(xlDown).Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
End If
  Sheets(i + 1).Activate
  i = i + 1
  
Loop
Sheets("EXP1").Select
  Columns("F:F").Select
    Range("F2").Activate
    Selection.NumberFormat = "dd/mm/yyyy"
End Sub

标签: excelvba

解决方案


在这 10 张工作表中,我不希望宏在工作表“XBA”和工作表“XBZ”上运行。

我会推荐使用For带有Select Case. 会更容易处理

这是一个实现您想要的示例。

Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets
    Select Case ws.Name
    Case "XBA", "XBZ"
        '~~> Do nothing
    Case Else
        '~~> Do what you want here
    End Select
Next ws

还要避免使用.Select. 您可能需要阅读如何避免在 Excel VBA 中使用 Select

这是一个例子。以下几行

Sheets("EXP1").Select
Columns("F:F").Select
Range("F2").Activate
Selection.NumberFormat = "dd/mm/yyyy"

也可以写成

Sheets("EXP1").Columns(6).NumberFormat = "dd/mm/yyyy"

推荐阅读