从填充有For Each循环的表中删除过时的值?

时间:2019-02-12 17:35:32

标签: excel vba

当前代码在每个以“ Rev”开头的工作表中循环并返回一个特定的单元格值,该值填充了我的工作表“ Table”中的一个表。

这很好。但是,如果删除了Rev工作表,则Table工作表中的值将保留。

有了该背景信息,什么是仅阻止当前Rev工作表值填充表的解决方案?

Sub Rev_loop()

Dim ws As Worksheet
Dim n As Long

For Each ws In Worksheets
    If ws.Name Like "Rev*" Then
        n = n + 1
        Worksheets("Table").Cells(n).Value = ws.Range("B2").Value

    End If

Next ws

End Sub

2 个答案:

答案 0 :(得分:1)

请先清除表格。然后像以前一样遍历工作表。

类似这样的东西:

Worksheets("Table").Range("B2:B99").ClearContents

答案 1 :(得分:1)

如果您不想在下一个循环之前清除表,则必须在某处记住工作表的名称。

通过此示例,您可以将工作表的名称及其值一起存储在前两列中:

Sub Rev_loop()
    Dim ws As Worksheet
    Dim n As Long

    With Worksheets("Table")
        n = 0
        For Each ws In Worksheets
            If ws.Name Like "Rev*" Then
                n = n + 1
                .Cells(n, 1).Value = ws.Name
                .Cells(n, 2).Value = ws.Range("B2").Value
            End If
        Next ws
    End With
End Sub

在第二个循环中,您比较存储的工作表名称,并删除所有具有过时名称的行:

Sub Correct_loop()
    Dim ws As Worksheet
    Dim StillValid As Boolean
    Dim n As Long

    With Worksheets("Table")
        For n = .Cells(.Rows.Count, 1).End(xlUp).Row To 1 Step -1
            StillValid = False
            For Each ws In Worksheets
                If ws.Name = .Cells(n, 1).Value Then
                    StillValid = True
                    Exit For
                End If
            Next ws
            If Not StillValid Then .Rows(n).Delete
        Next n
    End With
End Sub