vba删除多个工作表中的空白列。工作表计数是一个变量

vba删除多个工作表中的空白列。工作表计数是一个变量,vba,excel,Vba,Excel,我试图删除多个工作表中的所有空白列,这些工作表的计数是可变的 我已经尝试了下面的代码,它的工作,但它给我的错误时,它无法找到下一页。我打算与大家分享这一点,并希望没有错误 Sub delete_columns() i = ThisWorkbook.Worksheets.count a = 1 Do Until a = i Dim MyRange As Range Dim iCounter As Long Set MyRange = ActiveSheet.UsedRange For iCount

我试图删除多个工作表中的所有空白列,这些工作表的计数是可变的

我已经尝试了下面的代码,它的工作,但它给我的错误时,它无法找到下一页。我打算与大家分享这一点,并希望没有错误

Sub delete_columns()
i = ThisWorkbook.Worksheets.count
a = 1
Do Until a = i
Dim MyRange As Range
Dim iCounter As Long
Set MyRange = ActiveSheet.UsedRange
For iCounter = MyRange.Columns.count To 1 Step -1
If Application.CountA(Columns(iCounter).EntireColumn) = 0 Then
Columns(iCounter).Delete 
End If
Next iCounter
i = i + 1
ActiveSheet.Next.Select
Loop
End Sub

以下方面应起作用:

Sub delete_columns()
    Dim ws As Worksheet
    Dim MyRange As Range
    Dim iCounter As Long
    'Loop through each worksheet - no need to Activate or Select each one
    For Each ws In ThisWorkbook.Worksheets
        Set MyRange = ws.UsedRange
        For iCounter = MyRange.Columns.count To 1 Step -1
            'Need to reference columns of MyRange, rather than columns of the
            'worksheet, because column 5 of MyRange might be column 7 of the
            'worksheet (if the first used cell was in column C)
            If Application.CountA(MyRange.Columns(iCounter).EntireColumn) = 0 Then
                MyRange.Columns(iCounter).Delete 
            End If
        Next iCounter
        'Or, if you want to delete empty columns which exist to the left
        'of the UsedRange, you could do the following
        'For iCounter = MyRange.Columns(MyRange.Columns.count).Column To 1 Step -1
        '    If Application.CountA(ws.Columns(iCounter).EntireColumn) = 0 Then
        '        ws.Columns(iCounter).Delete 
        '    End If
        'Next iCounter
    Next
End Sub

以下方面应起作用:

Sub delete_columns()
    Dim ws As Worksheet
    Dim MyRange As Range
    Dim iCounter As Long
    'Loop through each worksheet - no need to Activate or Select each one
    For Each ws In ThisWorkbook.Worksheets
        Set MyRange = ws.UsedRange
        For iCounter = MyRange.Columns.count To 1 Step -1
            'Need to reference columns of MyRange, rather than columns of the
            'worksheet, because column 5 of MyRange might be column 7 of the
            'worksheet (if the first used cell was in column C)
            If Application.CountA(MyRange.Columns(iCounter).EntireColumn) = 0 Then
                MyRange.Columns(iCounter).Delete 
            End If
        Next iCounter
        'Or, if you want to delete empty columns which exist to the left
        'of the UsedRange, you could do the following
        'For iCounter = MyRange.Columns(MyRange.Columns.count).Column To 1 Step -1
        '    If Application.CountA(ws.Columns(iCounter).EntireColumn) = 0 Then
        '        ws.Columns(iCounter).Delete 
        '    End If
        'Next iCounter
    Next
End Sub

我没看到你已经发帖了!很好,它避免了激活stuff@A.S.H-我总是摆脱
Activate
Select
,这不仅是因为摆脱它是一种很好的做法,而且因为如果我使用它,我永远无法跟踪我在做什么。我没有看到你已经发布了!很好,它避免了激活stuff@A.S.H-我总是摆脱
Activate
Select
,这不仅是因为摆脱它是一种很好的做法,而且因为如果我使用它,我永远无法跟踪我正在做什么。