循环工作表并相应地排序数据

时间:2017-10-14 07:24:26

标签: excel vba excel-vba

为什么这段代码失败了?我希望它遍历所有工作表并对指定的范围进行排序。

使用

时代码有效
For ws each activeworkbook.worksheets
ws.activate

但是当我使用下面的代码时,它不起作用。

有人可以帮我解释为什么VBA会出现运行时错误1004

我还想使用For j = 2 to thisworkbook.worksheets.count 但这不起作用

Sub beautsort()

Dim LR As Long, LC As Long
Dim i As Integer, j As Integer
Dim ws As Worksheet


Application.ScreenUpdating = False

For Each ws In ThisWorkbook.Worksheets

    'Starting fromt the last occupied cells and going upwards
    Lastrow = ws.Range("B30000").End(xlUp).Row

    For i = Lastrow To 3 Step -1
        bLR = ws.Range("A" & i).End(xlUp).Offset(1, 0).Row
        LC = ws.Range("B" & i).End(xlToRight).Column

                    If ws.Range("B" & i).Value = "All Grps" Then
                        ws.Range(Range("B" & i).Offset(-1, -1), ws.Cells(bLR, LC)).Sort _
                                    key1:=ws.Range("B3"), Order1:=xlDescending
                    End If

    Next i

Next ws

Application.ScreenUpdating = True

End Sub

1 个答案:

答案 0 :(得分:0)

在这部分:

ws.Range(Range("B" & i).Offset(-1, -1), ws.Cells(bLR, LC))

非限定引用Range("B" & i).Offset(-1, -1)仍将引用当前工作表,这意味着整个范围介于当前工作表和ws工作表之间,这是不可能的并且会引发错误。

将引用限定为ws.Range("B" & i).Offset(-1, -1)将解决问题。

请注意,在范围(范围,范围)格式中使用范围时,实际上没有必要(有时更清楚/更简单)不符合外部范围。

尝试单步执行此操作:

Sub Referencing()

    With Range("B2:D4")

        Range(Cells(1, 1), Cells(2, 2)).Select
        .Select
        .Interior.ColorIndex = 3
        Range("A1").Select
        .Range(Cells(1, 1), Cells(2, 2)).Select
        Range("A1").Select
        Range(.Cells(1, 1), .Cells(2, 2)).Select
        Range("A1").Select
        .Range(.Cells(1, 1), .Cells(2, 2)).Select
        .Range("A1").Select

    End With

End Sub

在对内部和外部范围进行限定时,结果可能不是预期的结果。 .range和.cell属性实际上表现得像偏移属性。限定外部范围将参考范围设置为B2:D4,其中B2是第一行和第一列。限定内部范围然后再次应用相同的偏移量。