|
楼主 |
发表于 2014-8-14 08:02
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 香川群子 于 2014-8-14 08:44 编辑
aoe1981 发表于 2014-8-13 22:56
似乎没有解释“OrderCustom”,是留的悬念吗?
以前全靠录制和有道了,另外就是反得的测试……
早知有此帖 ...
OrderCustom 是按照自定义序列排序,一般不用。
自定义序列排序应用方面,有很多代码,需要单独开帖说明。
对于一般初级爱好者来说,尚无必要。
下面是相关的一些代码,你有兴趣就慢慢研究吧:
CustomListCheck
arr = WorksheetFunction.Transpose([a1:a20])
'事先在工作表中生成 A1,A2……A20 的自定义排序关键词。 如 【张三、李四、大头、小眼、……】
'然后读入VBA数组、并转为一维数组arr
n = Application.GetCustomListNum(arr)
'检查该数组对应的自定义序列是否之前已经写入Excel自定义排序List中
If n Then MsgBox "Exists !" Else MsgBox "Not Exists !"
'如果返回数值n则已经存在,否则就是尚不存在。
…………………………
'下面是添加自定义序列的语句
'方法-1,直接引用工作表单元格区域:
Application.AddCustomList listArray:=Range("A1:A20")
'直接引用工作表单元格区域中的自定义序列、添加到Excel自定义序列List表中去。
'该自定义序列读入程序以后,将永远保存在Excel数据中,除非你删除它。
n = Application.GetCustomListNum(arr)
'添加完成后读取该自定义序列在List表中的序号,以便排序时调用
'调用自定义序列的排序:
Range("G1:G20").Sort Key1:=Range("G1"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=13, MatchCase:=False, Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin, DataOption1:=xlSortNormal
'OrderCustom:=13
'第13个序列,就是添加后的自定义序列在List中的序号。 '注意,如果你从来没有在Excel中添加过自定义序列,那么新增的自定义序列会从n=12开始,并需按OrderCustom:=13调用
'这是因为,Excel已经默认建立了11个自定义序列。(或许版本不同、操作系统不同会有所不同,这个我不保证正确。)
'而如果之前你已经添加过自定义序列,且没有删除而保存至今,则需要根据实际n值、按OrderCustom:= n + 1调用
'方法-2, 把VBA一维数组中的内容添加到Excel自定义序列List表中去。
'VBA新添自定义序列:
arr = WorksheetFunction.Transpose([A1:A20)])
'这一句只是为了模拟得到VBA内存数组内容。
'实际可以直接利用任何方式得到的VBA一维数组arr的内容,作为自定义序列
'这就大大提高了可在代码中任意使用自定义序列的好处。
Application.AddCustomList listArray:=arr '直接把VBA一维数组内容作为自定义序列添加
n = Application.GetCustomListNum(arr) '查找返回该数组对应内容在自定义序列List中的序号
'使用新添序列排序:
Range("Q1:Q20").Sort Key1:=Range("Q2"), OrderCustom:=n + 1 '必须要加1后才可使用
'我个人猜测是因为List查询时,默认排序模式=1,而之后的自定义List序号都要顺延1位调用。所以要n+1后才能正确调用。
………………
'下面是检查Excel中已有自定义序列,并详细列出所有自定义序列内容。
For i = 1 To Application.CustomListCount
listArray = Application.GetCustomListContents(i)
For j = LBound(listArray) To UBound(listArray)
Worksheets("sheet1").Cells(j, i).Value = listArray(j)
Next
Next
…………
'查找自定义序列在List中的序号,并从List中删除这个序列
n = Application.GetCustomListNum(arr)
Application.DeleteCustomList n
…………
呵呵。
|
评分
-
1
查看全部评分
-
|