记一次VBA代码学习,Application.DeleteCustomList,导致的无法保存问题

先说解决方法:

        在执行Application.DeleteCustomList之前,将用到自定义排序的地方清空排序也就是先执行WorkSheet.Sort.SortFields.Clear,再执行Application.DeleteCustomList即可。

问题产生:

我最近在自学VBA,今天代码中使用了自定义排序功能,代码内容大概如下

    orderArr = Array("aa", "bb")
    Application.AddCustomList orderArr  ' 添加自定义序列

     '使用自定义序列进行排序
    Application.ThisWorkbook.Sheets("sheet1").Sort.SortFields.Clear
    Application.ThisWorkbook.Sheets("sheet1").Sort.SortFields.Add Key:=Columns("B"), SortOn:=xlSortOnValues, order:=xlAscending, CustomOrder:=Application.GetCustomListNum(orderArr)
    Application.ThisWorkbook.Sheets("sheet1").Sort.SetRange Application.ThisWorkbook.Sheets("sheet1").Range("a:b")
    Application.ThisWorkbook.Sheets("sheet1").Sort.Header = xlYes
    Application.ThisWorkbook.Sheets("sheet1").Sort.MatchCase = True '区分大小写
    Application.ThisWorkbook.Sheets("sheet1").Sort.Apply

    '删除自定义序列
    Application.DeleteCustomList Application.GetCustomListNum(orderArr)

这个功能导致每次运行完之后,excel无法保存的情况

问题定位:

很快我定位到问题出在 Application.DeleteCustomList这行代码上

可是百思不得其解,运行完毕后去查看自定义序列,也确实已经删除了

但一执行保存,程序立马崩溃

但仔细看自定义排序里,还在使用原来定义的排序“aa,bb”,我恍然明白了,大概是因为这里引用了一个不存在的自定义序列导致的

 解决方法自然是,把这个引用清理掉,然后再删除自定义序列


    orderArr = Array("aa", "bb")
    Application.AddCustomList orderArr  ' 添加自定义序列

     '使用自定义序列进行排序
    Application.ThisWorkbook.Sheets("sheet1").Sort.SortFields.Clear
    Application.ThisWorkbook.Sheets("sheet1").Sort.SortFields.Add Key:=Columns("B"), SortOn:=xlSortOnValues, order:=xlAscending, CustomOrder:=Application.GetCustomListNum(orderArr)
    Application.ThisWorkbook.Sheets("sheet1").Sort.SetRange Application.ThisWorkbook.Sheets("sheet1").Range("a:b")
    Application.ThisWorkbook.Sheets("sheet1").Sort.Header = xlYes
    Application.ThisWorkbook.Sheets("sheet1").Sort.MatchCase = True '区分大小写
    Application.ThisWorkbook.Sheets("sheet1").Sort.Apply

    '需要把排序设置都清理掉
    Application.ThisWorkbook.Sheets("sheet1").Sort.SortFields.Clear

    '删除自定义序列
    Application.DeleteCustomList Application.GetCustomListNum(orderArr)

 解决!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值