为什么这段代码失败了?我希望它遍历所有工作表并对指定的范围进行排序。
使用
时代码有效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
答案 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是第一行和第一列。限定内部范围然后再次应用相同的偏移量。