程序44:对工作表进行排序 有时,如果您要处理带有多个工作表(工作表和图表工作表)的工作簿,则您可能想按字母顺序排列工作表。 对工作表进行排序的基本代码是Move方法,其语法是: SheetsObject.Move(Before,After) 当然,为了有效地使用该方法,我们需要工作表名称的排序列表。这可以新建一个临时工作表来解决。 下一步,在VBE中插入包含实现这个功能的代码模块。模块中包括两个过程:第一个过程验证用户是否真的想排序工作表,如果想排序工作表的话,调用第二个过程去完成该项工作。第一个过程代码如下: ‘******************************************************************** Sub SortSheets() If MsgBox("您想对该工作簿中的工作表进行排序吗?", _ vbOKCancel + vbQuestion, "排序工作表") = vbOK Then SortAllSheets End If End Sub ‘******************************************************************** 产生动作的过程代码如下。该过程首先在数组中收集工作表的名称,接着在新的工作表中放置该数组,然后使用Sort方法对这些名称排序。接着,用排序好的数据重新填充数组。最后,使用Move方法重新排列这些工作表。 ‘******************************************************************** Sub SortAllSheets() '排序工作表 Dim wb As Workbook Dim ws As Worksheet Dim rng As Range, i As Integer Dim cSheets As Integer Dim sSheets() As String Set wb = ActiveWorkbook '获取数组实际大小 cSheets = wb.Sheets.Count ReDim sSheets(1 To cSheets) '用工作表名填充数组 For i = 1 To cSheets sSheets(i) = wb.Sheets(i).Name Next '创建新的工作表并在其第一列放置名称 Set ws = wb.Worksheets.Add For i = 1 To cSheets ws.Cells(i, 1).Value = sSheets(i) Next '对列排序 ws.Columns(1).Sort Key1:=ws.Columns(1), Order1:=xlAscending '重新填充数组 For i = 1 To cSheets sSheets(i) = ws.Cells(i, 1).Value Next '删除临时工作表 Application.DisplayAlerts = False ws.Delete Application.DisplayAlerts = True '通过移动每个工作表到最后来重新排列工作表 For i = 1 To cSheets wb.Sheets(sSheets(i)).Move after:=wb.Sheets(cSheets) Next End Sub ‘******************************************************************** 示例文档见 (程序44)对工作表进行排序.xls。
|