ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 对话框选择排序的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-12-9 22:38 | 显示全部楼层 |阅读模式
想实现通过对话框选择某列进行排序,怎么搞才好呢,讨教

自定义排序问题.zip (26.97 KB, 下载次数: 7)




TA的精华主题

TA的得分主题

发表于 2022-12-9 22:48 | 显示全部楼层
为什么不用excel自带的排序?
如果一定要用excel,
可以录一段排序的宏 或者 使用sql排序

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-9 22:52 | 显示全部楼层
smsn 发表于 2022-12-9 22:48
为什么不用excel自带的排序?
如果一定要用excel,
可以录一段排序的宏 或者 使用sql排序

因为实际上要锁定数据,不允许修改只可以排序

TA的精华主题

TA的得分主题

发表于 2022-12-9 22:58 | 显示全部楼层
  1.     With ActiveWorkbook.ActiveSheet.Sort
  2.         .SortFields.Clear
  3.         ActiveSheet.Sort.SortFields.Add2 Key:=Range("B3:B93") _
  4.             , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
  5.         .SetRange Range("A2:M93")
  6.         .Header = xlYes
  7.         .MatchCase = False
  8.         .Orientation = xlTopToBottom
  9.         .SortMethod = xlPinYin
  10.         .Apply
  11.     End With
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-9 23:31 | 显示全部楼层
这样实现了

Sub 自定义排序()
Dim arr, i&
'设置自定义排序的顺序
arr = Array("院校", "层次", "地区/城市", "类型", "性质", "排名", "专业录取概率", "专业代码", "计划", "学费", "学制", "最低位次")

x = InputBox("请在b--m之间选择要排序的列号", "排序")
If x > "a" Then

With Application
.ScreenUpdating = False
.AddCustomList ListArray:=arr
i = .GetCustomListNum(arr)
'x = Selection.Column '用鼠标所在的列排序

'设置排序的区域,不把序号列纳入排序范围
With Range("B2" & ":m" & Range("A65536").End(xlUp).Row)
'设置排序的起始单元格,即当前鼠标的位置
.Sort Key1:=Columns(x), Order1:=xlAscending, Header:=xlNo, OrderCustom:=i + 1, SortMethod:=xlPinYin, DataOption1:=xlSortNormal
End With
.DeleteCustomList ListNum:=i
.ScreenUpdating = True
MsgBox "排序完成", vbInformation
End With
Else
MsgBox "不能选择b--m之外的列"
End If
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-9 23:34 | 显示全部楼层
发现弹窗输入排序列,不如鼠标点选快捷



Sub 鼠标点选列排序()
Dim arr, i&
'设置自定义排序的顺序
arr = Array("院校", "层次", "地区/城市", "类型", "性质", "排名", "专业录取概率", "专业代码", "计划", "学费", "学制", "最低位次")

With Application
.ScreenUpdating = False
.AddCustomList ListArray:=arr
i = .GetCustomListNum(arr)
x = Selection.Column '用鼠标所在的列排序

'设置排序的区域,不把序号列纳入排序范围
With Range("B2" & ":m" & Range("A65536").End(xlUp).Row)
.Sort Key1:=Columns(x), Order1:=xlAscending, Header:=xlNo, OrderCustom:=i + 1, SortMethod:=xlPinYin, DataOption1:=xlSortNormal
End With
.DeleteCustomList ListNum:=i
.ScreenUpdating = True
MsgBox "排序完成", vbInformation
End With

End Sub

TA的精华主题

TA的得分主题

发表于 2022-12-9 23:50 | 显示全部楼层
不允许修改还能排序?
给你录了一个

自定义排序问题_g.zip

31.03 KB, 下载次数: 2

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-20 11:24 , Processed in 0.044745 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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