我不确定为什么下面的代码不起作用。我使用它作为更大的VBA子的一部分,但我只是发布下面的相关代码
我想在单独的工作簿上对范围(A到Z)进行排序。范围是“A5:M600”,工作表是“领导者”。它存储在声明为'wb2'的工作簿中。
下面的代码将打开我想要执行排序的文件,选择我想要排序的范围,但它实际上不会对选择进行排序。
有什么想法吗?
Sub SortWB2()
Dim wb2 As Workbook
Dim RetFilePath
'~~> Get the file path
RetFilePath = "T:\Purchasing\ADVENTURE RMS\Data Files\2015\Data.xlsx"
'if file path is not found, then exit the sub below
If RetFilePath = False Then Exit Sub
'set wb2 to open the file
Set wb2 = Workbooks.Open(RetFilePath)
With wb2.Worksheets("Leaders").Sort
.SetRange Range("A5:M600")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Application.DisplayAlerts = False
wb2.Close SaveChanges:=True
Application.DisplayAlerts = True
Set wb2 = Nothing
End Sub
答案 0 :(得分:2)
尽量远离.Activate
和.Select
作为指导代码目标的方法。
Set wb2 = Workbooks.Open(RetFilePath)
With wb2.Worksheets("Leaders").Range("A5:M600")
.Cells.Sort Key1:=.Columns(1), Order1:=xlAscending, _
Key2:=.Columns(3), Order2:=xlDescending, _
Orientation:=xlTopToBottom, Header:=xlNo
End With
将A列排序为主键,然后将C列排序为辅助键。如果不需要,您可以删除辅助密钥。您可以添加第三个键(例如,{N}升序的Key3:=.Columns(14), Order3:=xlAscending
),但它最多有三个键。如果需要更多,可以将命令加倍。
有关远离依赖选择和激活以实现目标的更多方法,请参阅How to avoid using Select in Excel VBA macros。
答案 1 :(得分:0)
嗯,可能你应该明确你的范围。尝试使用With语句:
With wb2.Worksheets("Leaders").Sort
.SetRange wb2.worksheets("Leaders").Range("A5:M600")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
我认为(希望!)这样做。