当前位置:首页 > 实用技巧 >

工作簿多个工作表按名称排序(工作簿里的多个工作表名称排序)

来源:原点资讯(www.yd166.com)时间:2023-11-27 12:40:15作者:YD166手机阅读>>

【分享成果,随喜正能量】不管经历多少,一定要永远乐观,永远积极,永远向上,因为,下一刻,就是奇迹。。

《VBA信息获取与处理》教程(10178984)是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、vbA延时操作,剪贴板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。程序文件通过32位和64位两种OFFICE系统测试。是非常抽象的,更具研究的价值。

教程共两册,二十个专题。今日的内容是“专题十三 VBA如何让Excel工作表按指定的顺序排列”:VBA按名称排序各个工作表

工作簿多个工作表按名称排序,工作簿里的多个工作表名称排序(1)

第一节 实现工作表按名称排序

大家好,我们先从按工作表名称排序讲起,先看一下下面的截图:

工作簿多个工作表按名称排序,工作簿里的多个工作表名称排序(2)

这个截图中,第一个工作表我称之为功能工作表页,其余的工作表从第2个到第7个是数据存储的工作表,顺序是没有规律的,我要让各个工作表自动地进行排序处理,代码该怎么写呢?

1 工作表按名称排序的实现思路

我们要借助于函数来实现我们的目的,这个函数就是完成排序的工作。谈到排序,肯定会涉及到升序和降序,另外还有数字和文本的比较方案,对于错误的处理。对于工作表的排序还涉及到工作表的移动,按名称的顺序进行工作表的移动即可。

1)升序和降序就是大小比较的方案,注意在实现的时候处理的顺序

2)数字和文本的比较方案,如果是文本的比较,要设置为vbTextCompare的比较方式。

3)工作表的排序还涉及到工作表的移动,就是工作表的.Move before:语句了,根据比较的结果移动工作表的位置。

4)我们进行数字的比较,就要求工作表的名称是数字,判断数字用到IsNumeric函数。

5)对于参与排序的工作表,我们要作为参数进行录入,当然要进行必要的判断,不能超过所有工作表的范围。

思路有了,我们看看实现的过程。

2 工作表按名称排序的代码实现过程

先给出我的代码:

Public Function SortWorksheetsByName(ByVal FirstToSort As Long, _

ByVal LastToSort As Long, _

ByRef ErrorText As String, _

Optional ByVal SortDescending As Boolean = False, _

Optional ByVal Numeric As Boolean = False) As Boolean

'FirstToSort:需要排序的第一个工作表

'LastToSort:需要排序的最后一个工作表

'FirstToSort与LastToSort如果都为0,那么表示所有的工作表都要参与排序

'ErrorText 为接收可能发生的任何错误的文本描述

'SortDescending 升序还是降序,默认是升序

'Numeric 按数字还是文本排序,如果按数字则要求工作表名需是数字

Dim WB As Workbook

Dim B As Boolean

'返回指定工作表对象的父对象,即工作薄

Set WB = Worksheets.Parent

ErrorText = vbNullString

'判断工作簿中的工作表是否处于保护状态,如果是则该属性值为 True。

If WB.ProtectStructure = True Then

ErrorText = "工作薄处于保护状态,无法排序"

SortWorksheetsByName = False

End If

If (FirstToSort = 0) And (LastToSort = 0) Then

FirstToSort = 1

LastToSort = WB.Worksheets.Count

Else

B = TestFirstLastSort(FirstToSort, LastToSort, ErrorText)

If B = False Then

SortWorksheetsByName = False

MsgBox ErrorText

Exit Function

End If

End If

'对工作表名称进行判断,如果有不是数字的则退出排序

If Numeric = True Then

For N = FirstToSort To LastToSort

If IsNumeric(WB.Worksheets(N).Name) = False Then

ErrorText = "有名称不为数字的工作表!"

SortWorksheetsByName = False

MsgBox ErrorText

Exit Function

End If

Next N

End If

'排序

For M = FirstToSort To LastToSort

For N = M To LastToSort

If SortDescending = True Then

If Numeric = False Then

If StrComp(WB.Worksheets(N).Name, WB.Worksheets(M).Name, vbTextCompare) > 0 Then

WB.Worksheets(N).Move before:=WB.Worksheets(M)

End If

Else

If CLng(WB.Worksheets(N).Name) > CLng(WB.Worksheets(M).Name) Then

WB.Worksheets(N).Move before:=WB.Worksheets(M)

End If

End If

Else

If Numeric = False Then

If StrComp(WB.Worksheets(N).Name, WB.Worksheets(M).Name, vbTextCompare) < 0 Then

WB.Worksheets(N).Move before:=WB.Worksheets(M)

End If

Else

If CLng(WB.Worksheets(N).Name) < CLng(WB.Worksheets(M).Name) Then

WB.Worksheets(N).Move before:=WB.Worksheets(M)

End If

End If

End If

Next

Next

SortWorksheetsByName = True

End Function

If LastToSort > Worksheets.Count Then

TestFirstLastSort = False

ErrorText = "结尾的工作数不能大于总工作表数"

MsgBox ErrorText

Exit Function

End If

If FirstToSort > LastToSort Then

TestFirstLastSort = False

ErrorText = "第一个工作表数要小于结尾的工作表数"

MsgBox ErrorText

Exit Function

End If

TestFirstLastSort = True

End Function

Sub mynz()

Sheets("SHEET1").Select

UU = SortWorksheetsByName(2, 7, "ErrorText", "TRUE", "TRUE")

If UU = True Then

MsgBox "排序完成!"

Else

MsgBox "排序错误!"

End If

Sheets("SHEET1").Select

End Sub

代码截图:

工作簿多个工作表按名称排序,工作簿里的多个工作表名称排序(3)

代码的讲解:

1)上述代码实现了按名称进行工作表排序的过程。整个过程中利用了两个函数,一个是SortWorksheetsByName函数,是主函数,实现排序;一个是TestFirstLastSort函数,用于验证录入的参数是否正确。

2)需要录入的参数有:

FirstToSort:需要排序的第一个工作表

LastToSort:需要排序的最后一个工作表

ErrorText为接收可能发生的任何错误的文本描述

SortDescending升序还是降序,默认是升序

Numeric 按数字还是文本排序,如果按数字则要求工作表名需是数字

3)Set WB = Worksheets.Parent'返回指定工作表对象的父对象,即工作薄。这种方法是十分方便的,我们在后续的代码中还要用到工作薄的工作表个数

4)If WB.ProtectStructure = True Then'判断工作簿中的工作表是否处于保护状态,如果是则该属性值为 True。

5)StrComp(WB.Worksheets(N).Name, WB.Worksheets(M).Name, vbTextCompare) > 0

StrComp为字符串比较的函数,返回值类型Variant (Integer)。返回值是-1,0,1

6)CLng(WB.Worksheets(N).Name) >CLng(WB.Worksheets(M).Name)

clng函数可以将字符串输出成长整型数据,用于比较。

其它的代码比较简单就不再多讲解了。

3 工作表按名称排序的代码实现效果

我们点击运行按钮,看下面的排序效果:

工作簿多个工作表按名称排序,工作簿里的多个工作表名称排序(4)

首页 123下一页

栏目热文

一个工作簿有多个表怎么汇总(如何汇总工作簿中多个工作表)

一个工作簿有多个表怎么汇总(如何汇总工作簿中多个工作表)

相信各位做过数据汇总的"表哥表姐"都有过这样的经历,需要将很多下级部门的数据汇总成一个总表(如下图所示),这个时候,很多...

2023-11-27 12:23:44查看全文 >>

批量统计一个工作簿中多个工作表(同一工作簿内多个工作表批量操作)

批量统计一个工作簿中多个工作表(同一工作簿内多个工作表批量操作)

如示例有多个工作簿,包含多个工作表,表中包含相同模板的数据,示例就为员工的销售数据。我们需要统计出例如各年级各班级学生成...

2023-11-27 12:09:18查看全文 >>

怎样将同一工作簿多个工作表归类(工作簿中怎么一起设置多个工作表)

怎样将同一工作簿多个工作表归类(工作簿中怎么一起设置多个工作表)

某超市一个月中每一天的销售报表都存放在同一工作簿内,若一个月有31天,则工作簿中会有31张报表。现在要汇总一个月的销售...

2023-11-27 12:36:48查看全文 >>

工作簿中如何批量增加多个工作表(工作簿里怎样快速插入批量工作表)

工作簿中如何批量增加多个工作表(工作簿里怎样快速插入批量工作表)

如何在 Excel 工作簿中新增工作表?这不是什么高难度技术,大部分人都会。但是要快速批量新建大量工作表呢?有没有快捷的...

2023-11-27 12:09:22查看全文 >>

led32h310能不能连wifi(led32h130怎么设置无线网络)

led32h310能不能连wifi(led32h130怎么设置无线网络)

本内容来源于@什么值得买APP,观点仅代表作者本人 |作者:阿文菌创作立场声明:我爱捡垃圾专栏是我最新开放的专栏,专栏内...

2023-11-27 12:35:16查看全文 >>

怎么打开电脑的flashplayer(电脑的flash player怎么设置)

怎么打开电脑的flashplayer(电脑的flash player怎么设置)

swf是动画设计软件Flash的专用格式,如果大家发现自己电脑上有这类文件时应该如何打开呢?部分朋友电脑更新到win10...

2023-11-27 12:16:46查看全文 >>

flashplayer怎样启用(flashplayer 怎么播放)

flashplayer怎样启用(flashplayer 怎么播放)

edge浏览器插件安装的2种方法,供你参考。方法一,edge浏览器扩展功能安装,方法二,在flash官网下载安装。一、e...

2023-11-27 12:20:43查看全文 >>

怎样打开电脑flashplayer(怎么查看电脑flashplayer版本)

怎样打开电脑flashplayer(怎么查看电脑flashplayer版本)

flv格式用什么打开?FLV格式是一种流媒体视频文件格式,通常用于在网页上播放视频内容。由于FLV文件使用H.264和A...

2023-11-27 12:42:37查看全文 >>

支付宝里的花呗现在还能不能分期(支付宝花呗怎么知道可以分期)

支付宝里的花呗现在还能不能分期(支付宝花呗怎么知道可以分期)

2023天猫“双11”活动今晚8点正式开始。今年“88VIP”大额券总规模达到200亿,用户可领券额度最高可达860元。...

2023-11-27 12:42:56查看全文 >>

支付宝没有开通花呗可以分期吗(支付宝开不了花呗可以分期吗)

支付宝没有开通花呗可以分期吗(支付宝开不了花呗可以分期吗)

支付宝是现在很多人使用的一种支付工具,虽然很多人平常都使用支付宝,但是很可能还不清楚在支付宝上有几种支付方式。简单来说,...

2023-11-27 12:28:16查看全文 >>

文档排行