根据列标题值在多个工作表中删除列

时间:2020-04-20 16:55:13

标签: excel vba

我有一些VBA代码,可以很好地删除单个工作表中任何列以“ FALSE”值开头的列。但是,当我在同一子代码中重复执行代码以在不同的工作表上生效时,我收到了“编译错误”警报(“当前作用域中的重复声明”)。谁能建议我如何使下面的摘录跨多个工作表(即“结果摘要”表和“方法声明评估”表以及其他表)工作?另外,请注意,每张工作表在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 个答案:

答案 0 :(得分:1)

并使用循环来缩短代码。

结合了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

答案 1 :(得分:0)

感谢@SLR和@BigBen。为了进一步扩展它,以便我还可以删除已标识的行(除了已标识的列之外),我对您的示例进行了如下调整,一切运行良好:

elapsedTime

再次感谢。