我有这个代码实际上完全符合我的要求:
转到特定范围,将表复制到新范围并重新排序表。
以下是代码:
t = foo.start_time
=> 2000-01-01 14:20:00 UTC
t.zone
=> "UTC"
t = t.in_time_zone("America/New_York").at_end_of_day
=> Sat, 01 Jan 2000 09:20:00 EST -05:00
Model.where("created_at > ?", t - 24.hours)
问题是:代码在所有工作表中都不起作用,它在第一个工作表中重复了n次。
答案 0 :(得分: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
此外 - 由于您正在对范围进行排序,我猜它包含值而不是公式。如果是这种情况,您可以替换
worksheets(I).Range("CW269:CX294").Copy worksheets(I).Range("CZ269:DA294")
与
worksheets(I).Range("CZ269:DA294").Value = worksheets(I).Range("CW269:CX294").Value
这样做的好处是它稍快,并且不使用剪贴板。
答案 1 :(得分:2)
试一试,
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(...)
,以便它知道哪个工作表是其父级。