我有一些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
答案 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
再次感谢。