如果您正在使用在工作簿中使用大量工作表的项目,则可能需要按工作表名称对它们进行排序。下面的短宏可以很好地解决问题:

Sub SortSheets()

Dim I As Integer, J As Integer

For I = 1 To Sheets.Count - 1         For J = I + 1 To Sheets.Count             If UCase(Sheets(I).Name) > UCase(Sheets(J).Name) Then                 Sheets(J).Move Before:=Sheets(I)

End If         Next J     Next I End Sub

如果工作簿中工作表的数量相对较少,则此宏有效。如果在运行宏时注意到运行时间很长,则可能需要在宏中使用更有效的排序算法。例如,下面的版本将所有工作表的名称读入数组,使用BubbleSort算法对数组进行排序,然后进行实际的排列:

Sub SortSheets()

Dim I As Integer     Dim sMySheets() As String     Dim iNumSheets As Integer

iNumSheets = Sheets.Count     Redim sMySheets(1 To iNumSheets)



For I = 1 To iNumSheets         sMySheets(I) = Sheets(I).Name     Next I

BubbleSort sMySheets

For I = 1 To iNumSheets         Sheets(sMySheets(I)).Move Before:=Sheets(I)

Next I End Sub
Sub BubbleSort(sToSort() As String)

Dim Lower As Integer, Upper As Integer     Dim I As Integer, J As Integer, K As Integer     Dim Temp As String

Lower = LBound(sToSort)

Upper = UBound(sToSort)

For I = Lower To Upper - 1         K = I         For J = I + 1 To Upper             If sToSort(K) > sToSort(J) Then                 K = J             End If         Next J         If I <> K Then             Temp = sToSort(I)

sToSort(I) = sToSort(K)

sToSort(K) = Temp         End If     Next I End Sub

已经编程了一段时间的任何人都知道BubbleSort是一个很好的通用排序例程,但是有更快的可用。

例如,如果您有很多工作表,而且它们开始时非常杂乱无章,那么您可能会发现QuickSort算法更有利。更改以上内容以使用QuickSort所需要做的就是添加QuickSort算法作为子例程(可以在任何一本好的Visual Basic编程手册中找到该算法),然后从主要SortSheets宏中调用该过程。 (这意味着更改现在调用BubbleSort的行。)

第二个宏和第一个宏之间还有另一个区别。第一个宏不注意用于命名工作表的文本的大小写。因此,我的工作表将被视为与我的工作表相同。第二个宏确实注意文本大小写,并进行相应的排序。当然,这不是一个特别大的问题,因为Excel也不会注意工作表名称中的大小写。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(1959)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: