2014-07-14 101 views
1

排序的所有工作表我想在我的工作簿中的所有工作表进行排序,但下面的代码一直给我一个错误。任何和所有的帮助将不胜感激。在工作簿

Dim i As Worksheet 

For Each i In ThisWorkbook.Sheets 
    Worksheets(i).Columns("A").Select 
    Selection.Sort key1:=Range("A1"), order1:=xlAscending, Header:=xlYes 
Next 

End Sub 
+0

为什么要那样做工作表(I)时,我已经是一个工作表?我从来没有在.NET中使用Excel,所以原谅我,如果这完全是一个问题。 – Dehli

回答

1
  1. 您没有使用i作为索引,因此“工作表(I)”是真正的“工作表(工作表)”,这将导致错误。只要使用“我”
  2. 范围(“A1”)未链接到一个工作表对象,它应该是i.Range(“A1”)

对于额外的效率,不要使用select(这是无需排序)。下面的代码应该工作:

Sub aaa() 
    Dim i As Worksheet 
    Dim r As Range 

    For Each i In ThisWorkbook.Sheets 
     Set r = i.Range("A:A") 
     r.Sort key1:=i.Range("A1"), order1:=xlAscending, Header:=xlYes 
    Next 
End Sub 
0

不止一点点,但是我所看到的互联网上,如果你想按字母顺序排序,做这样的事情:

Sub SortWorksheets() 

Dim N As Integer 
Dim M As Integer 
Dim FirstWSToSort As Integer 
Dim LastWSToSort As Integer 
Dim SortDescending As Boolean 

SortDescending = False 

If ActiveWindow.SelectedSheets.Count = 1 Then 
    FirstWSToSort = 1 
    LastWSToSort = Worksheets.Count 
Else 
    With ActiveWindow.SelectedSheets 
     For N = 2 To .Count 
      If .Item(N - 1).Index <> .Item(N).Index - 1 Then 
       MsgBox "You cannot sort non-adjacent sheets" 
       Exit Sub 
      End If 
     Next N 
     FirstWSToSort = .Item(1).Index 
     LastWSToSort = .Item(.Count).Index 
    End With 
End If 

For M = FirstWSToSort To LastWSToSort 
    For N = M To LastWSToSort 
     If SortDescending = True Then 
      If UCase(Worksheets(N).Name) > UCase(Worksheets(M).Name) Then 
       Worksheets(N).Move before:=Worksheets(M) 
      End If 
     Else 
      If UCase(Worksheets(N).Name) < UCase(Worksheets(M).Name) Then 
       Worksheets(N).Move before:=Worksheets(M) 
      End If 
     End If 
    Next N 
Next M 

End Sub 

变化SortDescending到如果您想降序排序,则为true。

您可以轻松地更改开始/改变FirstWSToSortLastWSToSort结束工作簿。

相关问题