Удалить устаревшие значения из таблицы, которая заполнена циклом For Each? - PullRequest
0 голосов
/ 12 февраля 2019

Текущий код проходит по каждому листу, который начинается с "Rev" и возвращает определенное значение ячейки, которое заполняет таблицу на моем листе "Table".

Это работает нормально.Однако, если рабочий лист Rev удален, значение в рабочем листе таблицы остается.

Имея эту фоновую информацию, как можно предотвратить заполнение таблицы только текущими значениями таблицы 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 голосов
/ 12 февраля 2019

Если вы не хотите очищать таблицу перед следующим циклом, вы должны где-то запомнить имена листов.

В этом примере вы можете хранить имена листов и их значения вместе в первых двухстолбцы:

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
0 голосов
/ 12 февраля 2019

Сначала очистите стол.Затем переберите рабочие листы, как и раньше.

Примерно так:

Worksheets("Table").Range("B2:B99").ClearContents
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...