2013-02-13 5 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

'전에 내가 가진 말을 덧붙였다. 이제는 객체가이 프로퍼티 나 메소드 런타임 에러를 지원하지 않는다는 것을 보여줍니다. - 조언을 해주십시오. – 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

이 코드로 수정되었습니다. 이제 범위 클래스의 Sort 메서드가 실패한 것을 보여줍니다. – 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