excel VBA,循环工作表未检测参数?

hec6srdp  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(169)

因此,我试图格式化所有工作表除了“名称”表。我想出了下面似乎不能循环和检测工作表“名称”。它将尝试格式化“名称”说,工作表是活动的,或者它将只适用于格式化一个单一的其他工作表时,工作表是活动的

Dim ws As Worksheet
    
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> "Names" Then
            Rows("1:1").Select
            Selection.AutoFilter
            ActiveSheet.Range("$A$1:$Q$19").AutoFilter Field:=4, Criteria1:="="
            Rows("2:2").Select
            Range(Selection, Selection.End(xlToRight)).Select
            Range(Selection, Selection.End(xlDown)).Select
            Selection.Delete Shift:=xlUp
            ActiveSheet.Range("$A$1:$Q$16").AutoFilter Field:=4
            Columns("G:G").Select
            Range(Selection, Selection.End(xlToRight)).Select
            Selection.Delete Shift:=xlToLeft
            Range("J15").Select
        End If
        
    Next ws

我试过完全重写代码,但同样的问题仍然存在

sbdsn5lh

sbdsn5lh1#

除了删除Activesheet之外,重写以避免.select,并且可能考虑Criteria1:="="的替代方案(如已经提到的);
考虑使用With语句明确地将每个操作连接到当前工作表。

Sub Format_Worksheets()

    Dim WS As Worksheet
    Dim lRow As Long
    Dim lCol As Long
    
    For Each WS In ThisWorkbook.Worksheets
        If WS.Name <> "Names" Then
            With WS
                .Rows("1:1").AutoFilter
                .Range("$A$1:$Q$19").AutoFilter Field:=4, Criteria1:="="
                lRow = .Range("A2").End(xlDown).Row
                lCol = .Range("A2").End(xlToRight).Column
                .Range(.Cells(lRow, 1), .Cells(lRow, lCol)).Delete shift:=xlUp
                .Range("$A$1:$Q$16").AutoFilter Field:=4
                lCol = .Range("G1").End(xlToRight).Column
                .Range("G1", .Cells(1, lCol)).Delete shift:=xlToLeft
            End With
        End If
    Next WS

End Sub

让我知道这是否适合你。它适合我...但我不是100%肯定的格式将匹配你所做的。我重写了它没有.select.activate,但有时很难说不看数据。

相关问题