先说解决方法:
在执行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)
解决!