需要在Excel文件(2013)中对4个关键字段进行排序。下面给出了代码。但却得不到预期的结果。需要你的帮助来解决这个问题。
Sub ToSortFile()
Dim lastRow, LastCol As Long
lastRow = Cells(Rows.Count, 2).End(xlUp).Row
LastCol = Cells(2, Columns.Count).End(xlToLeft).Column
Set source_data = Range(Cells(2, 2), Cells(lastRow, LastCol))
Set Ws = Sheets("Details")
With Ws.Sort
.SortFields.Clear
.SortFields.Add Key:=Ws.Range("B3"), Order:=xlAscending
.SortFields.Add Key:=Ws.Range("C3"), Order:=xlAscending
.SortFields.Add Key:=Ws.Range("K3"), Order:=xlAscending
.SortFields.Add Key:=Ws.Range("M3"), Order:=xlAscending
.SetRange Ws.Range("B3:U" & lastRow)
.Header = xlYes
.Apply
End With
End Sub发布于 2022-04-07 06:32:22
分类范围
使用Dim source_data As Range).的
Dim ws As Worksheet,Option Explicit )不建议在一行中声明
昏暗的LastRow一样长,LastCol一样长,我一样长,数字像双倍
因为在As Variant.中,LastRow被声明为LastRow
当您编写
Sheets是不合格的,即它指的是活动工作簿(ActiveWorkbook),您正在查看的工作簿可能是正确的工作簿,也可能不是。如果正在使用的工作表位于包含代码
ThisWorkbook对其进行限定:把ws设为工作表: Set ws = ThisWorkbook.Worksheets("Details")
如果不是
Dim wb作为工作簿: Set wb =工作簿(“Test.xlsx”)
或者如果工作簿关闭了,打开它.
Dim wb作为工作簿: Set wb = Workbooks.Open("C:\Test\Test.xlsx")
..。然后继续..。
把ws作为工作表: Set ws = wb.Worksheets("Details")
注意:在某些情况下,您必须使用ActiveWorkbook.
lastRow = Cells(Rows.Count, 2).End(xlUp).Row、Cells和Rows时是不合格的,即它们指的是活动工作表(ActiveSheet),它可能是工作表Details,也可能不是。Dim ws作为工作表: Set ws = ThisWorkbook.Worksheets("Details") Dim LastRow As Long: LastRow = ws.Cells(ws.Rows.Count,2).End(xlUp).Row
经验法则是尽可能明确(合理),即不要让Excel为您决定。xlNo.
.Header = xlGuess,但当范围包含标题时使用xlYes,或者在不包含消息头的情况下使用xlYes。在特定情况下,您只引用数据(Ws.Range("B3:U" & lastRow)),即它不包括标题,所以您应该使用Keys参数,尽管在列中指定要排序的任何单元格已经足够了。我建议指定整个列,即用B2代替B2:BLastRow,2是标题行.M、K、C和B,也就是说,它仍然可能对您不合适。Option Explicit
Sub ToSortFile()
Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
Dim ws As Worksheet: Set ws = wb.Worksheets("Details")
Dim LastRow As Long: LastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
Dim LastCol As Long
LastCol = ws.Cells(2, ws.Columns.Count).End(xlToLeft).Column
Dim srg As Range: Set srg = ws.Range("B2", ws.Cells(LastRow, LastCol))
With ws.Sort
.SortFields.Clear
.SortFields.Add Key:=srg.Columns(1), Order:=xlAscending
.SortFields.Add Key:=srg.Columns(2), Order:=xlAscending
.SortFields.Add Key:=srg.Columns(10), Order:=xlAscending
.SortFields.Add Key:=srg.Columns(12), Order:=xlAscending
.SetRange srg
.Header = xlYes
.Apply
End With
End Subhttps://stackoverflow.com/questions/71764082
复制相似问题