对工作簿中的所有工作表进行排序

Dan*_*mbo 3 sorting excel vba copy excel-vba

我有这个代码实际上完全符合我的要求:

转到特定范围,将表复制到新范围并重新排序表.

这是代码:

 Sub copy_paste_sort()

Dim oneRange As Range
Dim aCell As Range
Dim WS_Count As Integer
Dim I As Integer

         ' Set WS_Count equal to the number of worksheets in the active
         ' workbook.
WS_Count = ActiveWorkbook.Worksheets.Count

         ' Begin the loop.
    For I = 1 To WS_Count

Set oneRange = Range("CZ269:DA294")
Set aCell = Range("DA269")

Range("CW269:CX294").Select
Selection.Copy

Range("CZ269:DA294").Select
ActiveSheet.Paste

oneRange.Sort Key1:=aCell, Order1:=xlDescending, Header:=xlNo


    Next I

End Sub
Run Code Online (Sandbox Code Playgroud)

问题是:代码在所有工作表中都不起作用,它在第一个工作表中重复n次.

Ada*_*dam 8

您永远不会告诉代码转到下一个工作表.此外,您的选择看起来不必要.

 Sub copy_paste_sort()

Dim oneRange As Range
Dim aCell As Range
Dim WS_Count As Integer
Dim I As Integer

         ' Set WS_Count equal to the number of worksheets in the active
         ' workbook.
WS_Count = ActiveWorkbook.Worksheets.Count

         ' Begin the loop.
    For I = 1 To WS_Count

Set oneRange = worksheets(I).Range("CZ269:DA294")
Set aCell = worksheets(I).Range("DA269")

worksheets(I).Range("CW269:CX294").Copy  worksheets(I).Range("CZ269:DA294")

oneRange.Sort Key1:=aCell, Order1:=xlDescending, Header:=xlNo


    Next I

End Sub
Run Code Online (Sandbox Code Playgroud)

另外 - 由于你正在对范围进行排序,我猜它包含值而不是公式.如果是这种情况,您可以替换

worksheets(I).Range("CW269:CX294").Copy worksheets(I).Range("CZ269:DA294")

worksheets(I).Range("CZ269:DA294").Value = worksheets(I).Range("CW269:CX294").Value

这样做的好处是它稍快,并且不使用剪贴板.