我将数据分类到多个字段,包括一对是自定义排序顺序。其中一种自定义排序是按尺寸排列,包括57个类别。如果我将sort变量声明为
Const SizeSort As String = "XXS,2XS,XS,S,M,L,XL,1X,2XL,2X,XXL,2X/3X,... (out to 57 items)
并使用:
.SortFields.Add Key:=Columns("H"), CustomOrder:=SizeSort
一切正常。但是,我希望有人能够更改排序顺序而无需进入代码本身。我正在尝试将包含当前排序顺序的工作簿保存在列中,然后使用:
unicorns = Cells(Rows.Count, "A").End(xlUp).Row
For i = 1 To unicorns
SizeSort = SizeSort & "," & Range("A" & i)
Next i
SizeSort = Right(SizeSort, Len(SizeSort) - 1)
不幸的是,这不起作用 - 我得到运行时错误13-Type Mismatch。我想它与Const声明有关,但我不能为我的生活找出原因 - 当在立即窗口中查看时,两个字符串看起来都是。
答案 0 :(得分:0)
为了完整起见,这里有一个有效的方法,(改编自VBA Type Mismatch on CustomOrder,由SJR提供的链接):
定义构建排序列表的函数:
Function Sortlist(TmpName) As String
'(TmpName = name of file with your sort values)
Dim unicorns, i As Long
Dim TmpBook as Workbook
Set TmpBook = Workbooks.Open(TmpName)
unicorns = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To unicorns
Sortlist = Sortlist & "," & Range("A" & i)
Next i
Sortlist = Right(Sortlist, Len(Sortlist) - 1) 'trim the leading ","
TmpBook.Close
End Function
然后直接从Sort过程调用该函数:
With ActiveSheet.Sort
.SortFields.Clear
.SetRange Range("A1:M" & LR)
.SortFields.Add Key:=Columns("A")
.SortFields.Add Key:=Columns("B")
.SortFields.Add Key:=Columns("L"), CustomOrder:=YNSort
.SortFields.Add Key:=Columns("H"), CustomOrder:=Sortlist(filename)
.Header = xlYes
.Apply
End With
我只推荐这个非常长的自定义排序列表,或者需要经常更改而不编辑程序本身的列表。但我可以肯定地确认它是这样工作的......如果有人可以告诉我为什么,我会很感激!