从Workbook1sortingWorkbook2中的数据

我不知道为什么下面的代码不起作用。 我使用这个作为一个更大的VBA子的一部分,但我只是张贴下面的相关代码

我想在一个单独的工作簿上sorting一个范围(按A到Z)。 范围是“A5:M600”,工作表是“领导”。 这存储在声明为“wb2”的工作簿中。

下面的代码将打开我想要执行sorting的文件,select我想sorting的范围,但它不会实际sortingselect。

有任何想法吗?

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 

尽量远离。 .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作为辅助键。 如果不需要,可以删除辅助键。 您可以添加第三个键(例如Key3:=.Columns(14), Order3:=xlAscending为N列升序),但它最多有三个键。 如果您需要更多,可以将命令翻倍。

请参阅如何避免使用Excel中的selectVBAmacros来获取更多的方法来摆脱依靠select和activate来实现您的目标。

嗯,这可能是你应该明确你的范围。 试试这个With语句:

 With wb2.Worksheets("Leaders").Sort .SetRange wb2.worksheets("Leaders").Range("A5:M600") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With 

我想(希望!)那是做的。