2014-11-21 91 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

结合上述,你的代码可以看起来像下面。请尝试。 (UNTESTED

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 
' 

久经考验的版本

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)更改为With ThisWorkbook.Sheets(“Sheetname”)时,它在一张纸上运行时,它工作正常,但是当我将它放入上述结构中以运行多个根据你的代码它没有。有任何想法吗? – mm123 2014-11-25 03:54:11