![0bb9ca4a20b3386d4dc1f783598e66bc.png](https://img-blog.csdnimg.cn/img_convert/0bb9ca4a20b3386d4dc1f783598e66bc.png)
实现工作表按指定名称的顺序排序大家好,我们今日讲解“VBA信息获取与处理”教程中第十三个专题“VBA如何让Excel工作表按指定的顺序排列”的第二节“实现工作表按指定名称的顺序排序”,这个专题是非常实用的知识点,希望大家能掌握利用。
第二节 实现工作表按指定名称的顺序排序
大家好,我们继续本专题的学习。上一讲中,我们讨论了工作表按名称排序的方案,并利用函数来实现了。但很多的情况,我们需要工作表是按照指定的名称进行排序的,也就是说,我们要实现自定义排序的过程。当你给出指定的顺序后,剩下的工作由代码完成。
实现场景:如下面的截图,我会给出工作表要求排序的顺序,要求代码实现,实现的过程有校验,校验包括给出的名称是否正确,给出的工作表名称是否重复。下面我们来一步步地实现这个过程。
1 工作表按指定顺序排序的思路分析
为了达到上述场景的要求,我们先进行过程分析。排序的过程,就是工作表按顺序进行移动,我们可以保留第一个工作表的位置不变,然后将指定工作表按照顺序依次移到到第二个工作表之前。为了完成校验的过程,我们可以将给出的工作表名称赋值给这个工作薄的工作表,然后取一个返回值,如果可以顺利的实现,那么就可以说明这个工作表是存在的,否则不存在;为了校验给出的工作表是否重复,我们可以利用字典在给出的工作表名称中进行排重,还可以利用工作表的索引来完成,这里我按照后者来实现,前者读者可以参考我的《VBA数组与字典解决方案》的相关内容学习。
当然我们要在整个的过程中要和用户进行友好的互动,哪里出现了问题要反馈给用户。
2 工作表按指定顺序排序的代码实现
我先给出我的代码,然后再分析:
Public Function SortWorksheetsByNameArray(NameArray() As Variant, ByRefErrorText As String) As Boolean
Dim Arr() As Long
ErrorText = vbNullString
ReDimArr(LBound(NameArray) To UBound(NameArray))
On Error Resume Next
For N = LBound(NameArray) To UBound(NameArray)
'校验工作表的名称正确性
Err.Clear
M = Len(Worksheets(NameArray(N)).Name)
If Err.Number<> 0 Then
ErrorText = NameArray(N) & "工作表不存在"
SortWorksheetsByNameArray = False</