sorting升/降vba excel

我想sorting列(这是一个Y / N的标志列)。 它应该在每次点击之间按升序/降序进行切换。

我的代码不工作..我是VBA新手。 请任何帮助。

Private Sub CommandButton1_Click() Dim xlSort As XlSortOrder Dim LastRow As Long With ActiveSheet LastRow = .Cells(.Rows.Count, "E").End(xlUp).Row End With If (Range("E2").Value > Range("E" & CStr(LastRow))) Then xlSort = xlAscending Else xlSort = xlDescending End If .Sort Key1:=Range("E2"), Order1:=xlSort, Header:=xlNo, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal ActiveWorkbook.Save End Sub 

这段代码适用于我:

  Private Sub CommandButton1_Click() Dim xlSort As XlSortOrder Dim LastRow As Long With ActiveSheet LastRow = .Cells(.Rows.Count, "E").End(xlUp).Row If (.Range("E2").Value > .Range("E" & CStr(LastRow))) Then xlSort = xlAscending Else xlSort = xlDescending End If .Range("E2:E" & LastRow).Sort Key1:=.Range("E2"), Order1:=xlSort, Header:=xlNo, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal End With ActiveWorkbook.Save End Sub 

希望这个窍门!

如果你声明了一个范围variables(在下面的例子中是“rng”),这将更容易。 这段代码应该修复它。

 Private Sub CommandButton1_Click() Dim xlSort As XlSortOrder Dim LastRow As Long Dim rng As Range With ActiveSheet LastRow = .Cells(.Rows.Count, "E").End(xlUp).Row Set rng = Range("E2").Resize(LastRow, 1) With rng If (.Cells(1).Value > .Cells(LastRow - 1).Value) Then xlSort = xlAscending Else xlSort = xlDescending End If .Sort Key1:=.Cells(1), Order1:=xlSort, Header:=xlNo, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal End With End With ActiveWorkbook.Save End Sub 

用2个键来升序和降序sorting

 Sub Button1_Click() Dim xlSort As XlSortOrder Dim LastRow As Long With ActiveSheet LastRow = .Cells(.Rows.Count, "E").End(xlUp).Row If (.Range("E2").Value > .Range("E" & CStr(LastRow))) Then xlSort = xlAscending Else xlSort = xlDescending End If .Range("E2:E" & LastRow).Sort Key1:=.Range("E2"), Order1:=xlSort, Header:=xlNo, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal End With ActiveWorkbook.Save End Sub