2013-02-13 2 views
1

Я хочу сортировать столбец (это флагшток с Y/N). Он должен переключаться между восходящим/нисходящим при каждом нажатии.сортировать по возрастанию/по убыванию vba excel

мой код не работает. Я новичок в 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 
+1

Вы пропускаете 'Конец With' поместите его перед' ActiveWorkbook.Save' –

+0

Я добавил окончили. Теперь он показывает, что объект не поддерживает это свойство или ошибку времени выполнения метода - 438, пожалуйста, совет – user1987752

+0

Теперь у вас есть 2 'End With's - удалить строку на строке' LastRow = 'и везде, где вы видите слово« Range », заменить это с '.Range' –

ответ

6

Этот код работает для меня:

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 

Надеется, что это делает трюк !!!

+0

Я изменил exectly как ваш код. Теперь он показывает, что метод сортировки класса диапазона не удался. – user1987752

+1

Попробуйте просто скопировать и вставить свой код ТОЧНО - я запустил это в своей книге, и это сработало ... –

+0

It Worked !! Огромное спасибо!! – user1987752

0

Это будет проще, если вы объявите переменную диапазона («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 
+0

Когда я запускаю код, он показывает, что метод сортировки класса диапазона не удался – user1987752

+0

какую версию Excel вы используете? –

-1

Для сортировки по возрастанию и по убыванию с 2-мя ключами

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 
Смежные вопросы