ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 排序后点击保存出错并关闭excel的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-12-10 15:29 | 显示全部楼层 |阅读模式
一个工作表,用宏代码排序后,点击保存就出错,点击确定就自动关闭excel,并不会保存最新顺序,什么原因。提示:修改内容后点击保存,就正常,只在排序后点击保存异常。


保存错误.zip (57.88 KB, 下载次数: 4)

001.png

TA的精华主题

TA的得分主题

发表于 2022-12-10 15:54 | 显示全部楼层
可能缺少这样的一句  activesheet.sort.sortfields.clear

TA的精华主题

TA的得分主题

发表于 2022-12-10 15:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-10 16:54 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-10 19:18 | 显示全部楼层
本帖最后由 hhxq001 于 2022-12-11 15:59 编辑

经反复测试,是代码有问题,改为如下代码正常了

Sub 自定义排序()
With ActiveSheet.Sort
Dim x&
ScreenUpdating = False

.SortFields.Clear '清空排序条件
x = Selection.Column '按鼠标所在的列排序
Range("B2" & ":M" & Range("A65536").End(xlUp).Row).Sort Key1:=Columns(x), Order1:=xlAscending, Header:=xlGuess, SortMethod:=xlPinYin, DataOption1:=xlSortNorma, MatchCase:=False

'排序范围,排序关键字-这里按列,Order1:=xlAscending升序,Header:=xlGuess标题-自动判断,SortMethod:=xlPinYin 排序方法=拼音,DataOption:=xlSortNormal ' 文本格式的数字= xlSortTextAsNumbers:视作数字(默认值)、 xlSortNormal:视作文本
'    .MatchCase = False '不区分大小写
ScreenUpdating = True

End With
MsgBox "排序完成", vbInformation

End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-10 19:48 | 显示全部楼层
找到一段类似的,也正常
Sub 自定义排序2()
Dim SortRange As Range
Set SortRange = ActiveSheet.Range("B2:m" & Range("A65536").End(xlUp).Row) '范围
With ActiveSheet.Sort
     ScreenUpdating = False
     .SortFields.Clear '清除所有 SortFields 对象
     x = Selection.Column '按鼠标所在的列排序
     '新建 SortFields 对象
     .SortFields.Add Key:=Columns(x), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
'排序关键字按列、排序依据SortOnValues:按数值-默认值、Order次序xlAscending:升序、DataOption文本格式的数字= xlSortTextAsNumbers视为数字,= xlSortNormal视作文本

     '新建 SortFields 对象
     .SetRange SortRange '设置排序区域
     .Header = xlYes '指定第一行包含标题信息
     .MatchCase = False '指定不区分大小写
     .SortMethod = xlPinYin '指定中文排序方法
     .Apply '执行排序
     ScreenUpdating = True
     MsgBox "排序完成", vbInformation
End With
Set SortRange = Nothing
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-10 20:20 | 显示全部楼层

弹窗选择列:
Option Compare Text '不区分大小写
Sub 选择列进行排序()
Dim SortRange As Range
Set SortRange = ActiveSheet.Range("B2:m" & Range("A65536").End(xlUp).Row) '范围

With ActiveSheet.Sort
     ScreenUpdating = False
     .SortFields.Clear '清除所有 SortFields 对象
     x = InputBox("请在b--m之间选择要排序的列号", "排序")

    If x = "b" Or x = "c" Or x = "d" Or x = "e" Or x = "f" Or x = "g" Or x = "h" Or x = "i" Or x = "j" Or x = "k" Or x = "l" Or x = "m" Then

     '新建 SortFields 对象
       .SortFields.Add Key:=Columns(x), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
'排序关键字按列、排序依据SortOnValues:按数值-默认值、Order次序xlAscending:升序、DataOption文本格式的数字= xlSortTextAsNumbers视为数字,= xlSortNormal视作文本

     '新建 SortFields 对象
       .SetRange SortRange '设置排序区域
       .Header = xlYes '指定第一行包含标题信息
       .MatchCase = False '指定不区分大小写
       .SortMethod = xlPinYin '指定中文排序方法
       .Apply '执行排序

       MsgBox "排序完成", vbInformation
    Else
      MsgBox " 当前选择的不是b--m之间的列,所以不允许排序,请重新选择"
    End If
ScreenUpdating = True
End With
Set SortRange = Nothing

End Sub

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

本版积分规则

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

GMT+8, 2024-11-20 10:47 , Processed in 0.045566 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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