2014-11-21 8 views
1

는 내가이 코드 덩어리를 실행할 때 절반의 시간에 대한 오류 1004을 받고있는 것으로 보인다 나는 이유는 전혀 확실하지 않다 : 코드가 실행되고이런타임 오류 (1004)는 정렬 기능 VBA

Dim ranged As Range 
Set ranged = Range("AJ2") 
Set ranged = Range(ranged, ranged.End(xlDown)) 


Sheets(i).Select 
ActiveWorkbook.Worksheets(i).Sort.SortFields.Add Key:=ranged, _ 
    SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal 
With ActiveWorkbook.Worksheets(i).Sort 
    .SetRange ranged 
    .Header = xlNo 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 

End With 

을 일련의 워크 시트에서 열 AJ의 범위는 각 시트의 크기가 다르기 때문에 시작시 범위 정의가 필요합니다. 목표는 범위의 순서를 뒤집는 것입니다. 누구든지 오류가 여기에 무엇을 도와 드릴까요?

답변

0
  1. 대부분의 경우 워크 시트를 선택할 필요가 없습니다. 참조 할 수도 있습니다 THIS

  2. 범위를 구성하는 데 xlDown을 사용하지 마십시오. xlUp을 사용하여 데이터가있는 마지막 행을 찾아서 수행하십시오. 당신이보고 싶어 할 수도 있습니다 THIS

위의 두 가지를 모두 합치면, 코드는 다음과 같을 수 있습니다. 그것을 시도하십시오. (안된)

Dim ranged As Range 
Dim lRow As Long 

' 
'~~> Rest of the code 
' 

With ThisWorkbook.Sheets(i) 
    '~~> Find Last row in Col AJ which has data 
    lRow = .Range("AJ" & .Rows.Count).End(xlUp).Row 

    '~~> Construct your range 
    Set ranged = .Range("AJ2:AJ" & lRow) 

    '~~> Sort 
    .Sort.SortFields.Add Key:=ranged, _ 
         SortOn:=xlSortOnValues, _ 
         Order:=xlDescending, _ 
         DataOption:=xlSortNormal 
    With .Sort 
     .SetRange ranged 
     .Header = xlNo 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 
End With 

' 
'~~> Rest of the code 
' 

시도하고 테스트 완료 VERSION 도와

Sub Sample() 
    Dim ranged As Range 
    Dim lRow As Long, i As Long 

    For i = 1 To ThisWorkbook.Sheets.Count 
     ' 
     '~~> Rest of the code 
     ' 

     With ThisWorkbook.Sheets(i) 
      '~~> Find Last row in Col AJ which has data 
      lRow = .Range("AJ" & .Rows.Count).End(xlUp).Row 

      '~~> Construct your range 
      Set ranged = .Range("AJ2:AJ" & lRow) 

      '~~> Sort 
      .Sort.SortFields.Add Key:=ranged, _ 
           SortOn:=xlSortOnValues, _ 
           Order:=xlDescending, _ 
           DataOption:=xlSortNormal 
      With .Sort 
       .SetRange ranged 
       .Header = xlNo 
       .MatchCase = False 
       .Orientation = xlTopToBottom 
       .SortMethod = xlPinYin 
       .Apply 
      End With 
     End With 

     ' 
     '~~> Rest of the code 
     ' 
    Next i 
End Sub 
+0

감사합니다. 이 코드를 정확히 내 복사 한 및 여전히 "런타임 오류 1004 : 정렬 참조 유효하지 않습니다. 그것은 정렬 할 데이터 내에 있는지 확인하고 첫 번째 정렬 기준 상자에있는 동일하거나 비어 있습니다. " 정말 이상한 점은 ThisWorkbook.Sheets (i)를 사용하여 ThisWorkbook.Sheets ("Sheetname")로 바꿔서 한 시트에서만 실행할 때 위의 구조로 여러 시트를 실행할 때 유용합니다. 귀하의 코드에 따라 그렇지 않습니다. 어떤 아이디어? – mm123