Удалить столбцы из нескольких листов на основе значения заголовка столбца - PullRequest
1 голос
/ 20 апреля 2020

У меня есть некоторый код VBA, который очень хорошо работает при удалении любых столбцов на одном листе, где любые столбцы возглавляются со значением 'FALSE'. Однако, когда я повторяю код в той же подпункте, чтобы он вступил в силу на другом листе, я получаю предупреждение об ошибке компиляции (Duplicate Объявление в текущей области). Может ли кто-нибудь посоветовать, как можно заставить приведенную ниже выписку работать на нескольких листах (т. Е. Как на листе «Сводка результатов», так и на листах «Оценка формулировки метода» и другие листы)? Также обратите внимание, что на каждом листе имеется разное количество столбцов в диапазоне lColumn.

Sub DeleteColumns()

With Sheets("Outcome Summary")
.Select
Dim lColumn As Long
Dim iCntr As Long
lColumn = 108
For iCntr = lColumn To 1 Step -1
If Cells(1, iCntr) = False Then
Columns(iCntr).Delete
End If
Next

With Sheets("Method Statement Evaluation")
.Select
Dim lColumn As Long
Dim iCntr As Long
lColumn = 156
For iCntr = lColumn To 1 Step -1
If Cells(1, iCntr) = False Then
Columns(iCntr).Delete
End If
Next
End With

End Sub

enter image description here

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

И сократите свой код, используя al oop.

Это включает в себя точку зрения BigBen о поиске последнего использованного столбца (на основе строки 1) в случае, если он отличается на разных листах.

Sub DeleteColumns()

Dim ws As Worksheet

For Each ws In Worksheets
    Select Case ws.Name
        Case "Outcome Summary", "Method Statement Evaluation" 'affected sheets
            Dim lColumn As Long
            Dim iCntr As Long
            lColumn = ws.Cells(1, Columns.Count).End(xlToLeft).Column + 1
            For iCntr = lColumn To 1 Step -1
                If ws.Cells(1, iCntr) = False Then
                    ws.Columns(iCntr).Delete
                End If
            Next
    End Select
Next ws

End Sub
0 голосов
/ 21 апреля 2020

Спасибо @SLR и @BigBen. Чтобы еще больше расширить это, чтобы я мог также удалить идентифицированные строки (в дополнение к идентифицированным столбцам), я настроил ваш пример следующим образом, и все работает хорошо:

Sub DeleteRowsAndColumns()

Dim ws As Worksheet

For Each ws In Worksheets
    Select Case ws.Name
        Case "Outcome Summary", "Method Statement Evaluation" 'affected sheets
            Dim lColumn As Long
            Dim lRow As Long
            Dim iCntr As Long

            'This section deletes columns
            lColumn = ws.Cells(1, Columns.Count).End(xlToLeft).Column + 1
            For iCntr = lColumn To 1 Step -1
                If ws.Cells(1, iCntr) = False Then
                    ws.Columns(iCntr).Delete
                End If
            Next
            'this section deletes rows
            lRow = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1
            For iCntr = lRow To 1 Step -1
                If ws.Cells(iCntr, 1) = False Then
                    ws.Rows(iCntr).Delete
                End If
            Next
    End Select
Next ws

End Sub

Еще раз спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...