我需要一张桌子的自定义排序顺序 排序顺序取决于字体颜色。
首先记录自定义排序顺序的宏:
Application.AddCustomList ListArray:=Array("onsdag", "torsdag", "fredag", _
"lördag", "söndag", "måndag", "tisdag") ' wednsday -> tuesday sort order
ActiveWorkbook.Worksheets("SAP 1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("SAP 1").Sort.SortFields.Add Key:=Range("A2:A5031") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("SAP 1").Sort.SortFields.Add Key:=Range("I2:I5031") _
, SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
"onsdag,torsdag,fredag,lördag,söndag,måndag,tisdag", DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("SAP 1").Sort
.SetRange Range("A1:I5031")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
上面的代码完成了它应该做的事情 然后为了使自定义排序顺序更加自定义,我尝试了这段代码:
shtD = "Data 1703"
If Sheets(shtD).Range("V3").Font.Color = vbGreen Then
ordn = "måndag,tisdag,onsdag,torsdag,fredag,lördag,söndag" ' Monday -> Sunday
Application.AddCustomList ListArray:=Array("måndag", "tisdag", "onsdag", "torsdag", "fredag", "lördag", "söndag")
ElseIf Sheets(shtD).Range("W3").Font.Color = vbGreen Then
ordn = "tisdag,onsdag,torsdag,fredag,lördag,söndag, måndag" ' Tuesday -> Monday
Application.AddCustomList ListArray:=Array("tisdag", "onsdag", "torsdag", "fredag", "lördag", "söndag", "måndag")
ElseIf Sheets(shtD).Range("X3").Font.Color = vbGreen Then
ordn = "onsdag,torsdag,fredag,lördag,söndag,måndag,tisdag"
Application.AddCustomList ListArray:=Array("onsdag", "torsdag", "fredag", "lördag", "söndag", "måndag", "tisdag")
ElseIf Sheets(shtD).Range("Y3").Font.Color = vbGreen Then
ordn = "torsdag,fredag,lördag,söndag,måndag,tisdag,onsdag"
Application.AddCustomList ListArray:=Array("torsdag", "fredag", "lördag", "söndag", "måndag", "tisdag", "onsdag")
ElseIf Sheets(shtD).Range("Z3").Font.Color = vbGreen Then
ordn = "fredag,lördag,söndag,måndag,tisdag,onsdag,torsdag"
Application.AddCustomList ListArray:=Array("fredag", "lördag", "söndag", "måndag", "tisdag", "onsdag", "torsdag")
ElseIf Sheets(shtD).Range("AA3").Font.Color = vbGreen Then
ordn = "lördag,söndag,måndag,tisdag,onsdag,torsdag,fredag"
Application.AddCustomList ListArray:=Array("lördag", "söndag", "måndag", "tisdag", "onsdag", "torsdag", "fredag")
ElseIf Sheets(shtD).Range("AB3").Font.Color = vbGreen Then
ordn = "söndag,måndag,tisdag,onsdag,torsdag,fredag,lördag"
Application.AddCustomList ListArray:=Array("söndag", "måndag", "tisdag", "onsdag", "torsdag", "fredag", "lördag")
Else
Exit Sub
End If
Application.ScreenUpdating = False
Sheets("SAP 1").Visible = xlSheetVisible
Sheets("SAP 1").Activate
ActiveWorkbook.Worksheets("SAP 1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("SAP 1").Sort.SortFields.Add Key:=Range("A2:A5031") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("SAP 1").Sort.SortFields.Add Key:=Range("I2:I5031") _
, SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
ordn, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("SAP 1").Sort
.SetRange Range("A1:I5031")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
简而言之,我首先创建CustomOrder
字符串和Application.AddCustomList ListArray
,然后将其应用于录制的宏。
但我得到错误13,这一行不兼容的类型:
ActiveWorkbook.Worksheets("SAP 1").Sort.SortFields.Add Key:=Range("I2:I5031"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:=ordn, DataOption:=xlSortNormal
当我打开对话框手动执行自定义排序顺序时,似乎没有保存自定义顺序。我只能看到录制宏时手动创建的那个 谁知道问题是什么?
答案 0 :(得分:1)
CustomOrder
参数需要Variant
,因此请使用CVar(
)将String
投射到Variant
ActiveWorkbook.Worksheets("SAP 1").Sort.SortFields.Add Key:=Range("I2:I5031") _
, SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
cVar(ordn), DataOption:=xlSortNormal
答案 1 :(得分:0)
查看以下网站。在您所描述的自定义顺序中,您似乎面临变量问题 https://explorationsintoexcel.wordpress.com/2016/11/06/set-custom-sort-order-from-range-values-in-excel-vba/
似乎不可能只输入没有引号的变量,但你可以通过使用多个引号和&来规避它。输入变量:
CustomOrder:=""" & ordn & """