ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: monkeyyd

[求助] 请问如何对工作表按照工作表名进行排序?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-6-10 16:24 | 显示全部楼层
本帖已被收录到知识树中,索引项:工作表和工作簿
写得真是好啊!!!学习了!!!

TA的精华主题

TA的得分主题

发表于 2009-6-10 23:25 | 显示全部楼层
q我也要学习……太厉害了……

TA的精华主题

TA的得分主题

发表于 2009-6-11 08:34 | 显示全部楼层

回复 1楼 monkeyyd 的帖子

Sub Sorting()
Dim sCount As Integer, i As Integer, j As Integer
Application.ScreenUpdating = False
sCount = Worksheets.Count
If sCount = 1 Then Exit Sub
For i = 1 To sCount - 1
For j = i + 1 To sCount
If Worksheets(j).Name < Worksheets(i).Name Then
Worksheets(j).Move before:=Worksheets(i)
End If
Next j
Next i
End Sub

Sub SortSheet()
Dim WsCount As Integer
Dim WsArray() As String
Dim Ws As Worksheet
On Error Resume Next
WsCount = ActiveWorkbook.Worksheets.Count
ReDim WsArray(1 To WsCount)
If ActiveWorkbook.ProtectStructure Then
        MsgBox ActiveWorkbook.Name & " 被保护,不能进行排序,请解除保护后排序", _
           vbCritical, "不能排序工作表"
        Exit Sub
End If
For Each Ws In ActiveWorkbook.Worksheets
   t = t + 1
   WsArray(t) = Ws.Name
Next Ws
'对数组进行排序
For i = 1 To UBound(WsArray) - 1
   For j = i + 1 To UBound(WsArray)
         If WsArray(i) > WsArray(j) Then
              t = WsArray(i)
              WsArray(i) = WsArray(j)
              WsArray(j) = t
         End If
   Next j
Next i
'利用Move方法以及Sheets(i)移动工作表,按指定的顺序排列
For i = 1 To WsCount
   Worksheets(WsArray(i)).Move before:=Sheets(i)
Next i
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-6-11 15:12 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-6-17 10:16 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-6-17 10:12 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-3-5 08:55 | 显示全部楼层
不知道你们有没有发现:
如果我的工作表有12个,运行以上程序,
那么得出的结果就是1,10,11,12,2,3,4,...9.
我想得到的结果是1,2,3,....11,12.
有没有办法解决?

TA的精华主题

TA的得分主题

发表于 2010-3-5 09:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这么历害,真要好好学习

TA的精华主题

TA的得分主题

发表于 2010-9-28 14:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 heruixiong 于 2010-3-5 08:55 发表
不知道你们有没有发现:
如果我的工作表有12个,运行以上程序,
那么得出的结果就是1,10,11,12,2,3,4,...9.
我想得到的结果是1,2,3,....11,12.
有没有办法解决?


Sub SortWorksheets()  '工作表按表名的数值而非字符排序
    Dim N As Integer
    Dim i As Integer
    For i = 2 To Sheets.Count
        For j = i To Sheets.Count
                n1 = Worksheets(j).Name
                n2 = Worksheets(i).Name
               
If Val(n1) < Val(n2) Then
                    Worksheets(j).Move Before:=Worksheets(i)
                End If
        Next j
    Next i

  [主体引用网上的,具体出处忘了,我只变换了粗体部分使得按数值排序]

[ 本帖最后由 cczjw 于 2010-9-28 14:09 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-10-17 21:21 | 显示全部楼层
老朽应属于EXCELHOME论坛四大才子之一。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-27 18:44 , Processed in 0.034891 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表