sorting工作簿中的所有工作表

我有这个代码,实际上正是我想要的:

进入特定的范围,在新的范围内复制表格并重新排列表格。

这里是代码:

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 

问题是:代码不能在所有工作表中工作,它在第一个工作表中重复n次。

你永远不会告诉代码去下一个工作表。 另外,你的select看起来不是必要的。

  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 

另外 – 既然你正在sorting范围,我猜测它包含的值,而不是公式。 如果是这样的话,你可以更换

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

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

这样做的好处是速度稍快,并且不使用剪贴板。

试试看,

 Sub copy_paste_sort() Dim I As Long ' Begin the loop. For I = 1 To ActiveWorkbook.Worksheets.Count With Worksheets(I) With .Range("CW269:CX294") .Copy destination:=.Range("CZ269") .Offset(0, 3).Cells.Sort Key1:=aCell, Order1:=xlDescending, Header:=xlNo End With End With Next I End Sub 

你正在循环I作为工作的指数,但没有做任何事情。 With Worksheets(I) ... End With依次引用eac h工作表。 请注意Range(...)变成.Range(...)以便它知道什么工作表是其父项。