Перебирать таблицы и удалять данные - PullRequest
1 голос
/ 26 марта 2019

У меня есть следующий код, который генерирует ошибку.

Я хочу перебрать все таблицы на активном рабочем листе и удалить данные, кроме двух данных, указанных в коде.

Sub Clear_Tables()

Dim tbl As ListObject

For Each tbl In ActiveSheet.ListObjects

    If tbl <> "Table_Extracted_Data_Summary" Or tbl <> "Manual_Entries" Then
        tbl.DataBodyRange.Rows.Delete
    Else

    End If

Next tbl

End Sub

Код ошибки:

Ошибка времени выполнения «91»:

Переменная объекта или переменная блока не установлена ​​

У меня работает следующий код, но по какой-то причине, если я удаляю содержимое 2 таблиц, я хочу оставить

Sub Clear_Tables()

'PURPOSE: Loop through and apply a change to all Tables in the Active Excel 
Sheet

Dim TableToCheck As ListObject

For Each TableToCheck In ActiveSheet.ListObjects
    If TableToCheck.Name = "Table_Extracted_Data_Summary" Or 
TableToCheck.Name = "Manual_Entries" Then 'Name of Table you do NOT want to 
update
        If Not (TableToCheck.DataBodyRange Is Nothing) Then 
TableToCheck.DataBodyRange.ClearContents
    End If
Next TableToCheck

End Sub

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Измените ваш второй код следующим.Вам нужны таблицы, чье имя НЕ A и НЕ B.

Sub Clear_Tables()

    'PURPOSE: Loop through and apply a change to all Tables in the Active Excel
    Sheet

    Dim TableToCheck As ListObject

    For Each TableToCheck In ActiveSheet.ListObjects
        If TableToCheck.Name <> "Table_Extracted_Data_Summary" And _
            TableToCheck.Name <> "Manual_Entries" Then 'Name of Table you do NOT want to update

            If Not (TableToCheck.DataBodyRange Is Nothing) Then
                TableToCheck.DataBodyRange.ClearContents
            End If
        End If
    Next TableToCheck

End Sub

Или, если необходимо, вернитесь с ClearContents на Rows.Delete.

0 голосов
/ 26 марта 2019

Попробуйте использовать оператор AND (для ИЛИ могут потребоваться скобки):

Sub Clear_Tables()

Dim tbl As ListObject

For Each tbl In ActiveSheet.ListObjects

    If tbl <> "Table_Extracted_Data_Summary" And tbl <> "Manual_Entries" Then
        tbl.DataBodyRange.Rows.Delete
    End If

Next tbl

End Sub

В противном случае ваш синтаксис выглядит нормально.
Я не смог воспроизвести вашу ошибку "91".

...