excel - 对工作簿 1 中的工作簿 2 中的数据进行排序

标签 excel vba

我不确定为什么下面的代码不起作用。我将其用作更大的 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

最佳答案

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

参见How to avoid using Select in Excel VBA macros了解更多摆脱依赖 select 和 activate 来实现目标的方法。

关于excel - 对工作簿 1 中的工作簿 2 中的数据进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31612900/

相关文章:

excel - 在 Excel 查询编辑器中合并具有不同列数的 CSV 文件文件夹

Excel:平均如果

vba - 使用 VBA 从 Excel 激活 Word 窗口

excel - VBA 运行时错误 3021 - 没有当前记录

sql - 计算一列中各行之间的 Datediff(超过 2 条记录)

vba - 如何将Word 2010宏部署给其他人?

Excel VBA : set a table cell to read only

java - 如何加快excel读写速度

excel - 如何连接单元格值,直到它在 Excel 中找到一个空白,然后在段落的第一行返回结果?

html - 我可以使用 VBA 创建并打开 HTML 文件吗?