excel - 做直到带排除的工作表循环
问题描述
在下面,宏将循环到工作表“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
解决方案
在这 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"
推荐阅读
- php - CSS 网格在桌面上堆积
- php - 为什么 Codeigniter 更新后配置项调用返回错误(1.7.2 到 2.0.3)
- android - 播放使用下载管理器下载的 Mp3 文件
- node.js - 如何在处理单个用户帐户和多个用户(具有角色的组织帐户)时创建 MongoDB 模式设计
- linux - 操作系统在本地使用时是否执行 TCP/IP 优化
- javascript - 如何使用 react-dropzone 读取文件内容?
- google-sheets - 根据谷歌表中的一个数字列检索最后 n 行
- excel - 根据其他单元格的值保护单元格
- typescript - 如何在 vuejs 中的基于类的组件中编写计算设置器
- android - 如何知道罐子何时需要脱糖(对于 d8.bat)