用于排序的Excel常量

时间:2012-08-01 19:06:44

标签: excel vba excel-vba

我正在使用Excel VBA中的排序过程,并希望有一个变量集,可以根据条件将顺序更改为升序或降序。 我尝试了这个但是出现了“类型不匹配”错误。

If SBF = 0 Then
    S = "xlAscending"
Else: S = "xlDescending"
End If  
ActiveWorkbook.Worksheets(SN(x)).sort.SortFields.Add Key:=Range( _
        "B3:B" & last_cell), SortOn:=xlSortOnValues, Order:=S, DataOption:= _
        xlSortNormal

2 个答案:

答案 0 :(得分:2)

这有效:

Public Enumeration, XlSortOrder, instance

Dim instance As XlSortOrder
If SBF = 0 Then
    instance = xlAscending
Else: instance = xlDescending
End If
ActiveWorkbook.Worksheets(SN(x)).sort.SortFields.Add Key:=Range( _
    "B3:B" & last_cell), SortOn:=xlSortOnValues, Order:=instance, DataOption:= _
    xlSortNormal

答案 1 :(得分:0)

xlAscendingxlDescending是Excel常量。要查看它们的值,只需在立即窗口中打印即可。请参阅下面的快照。

enter image description here

因此,您实际上可以将代码编写为

If SBF = 0 Then S = 1 Else S = 2

ActiveWorkbook.Worksheets(SN(x)).Sort.SortFields.Add _
Key:=Range("B3:B" & last_cell), _
SortOn:=xlSortOnValues, _
Order:=S, _
DataOption:=xlSortNormal

同样,xlSortOnValuesxlSortNormal的值为0。如果您愿意,您也可以将上述代码编写为

If SBF = 0 Then S = 1 Else S = 2

ActiveWorkbook.Worksheets(SN(x)).Sort.SortFields.Add _
Key:=Range("B3:B" & last_cell), _
SortOn:=0, _
Order:=S, _
DataOption:=0

修改

我假设S已被声明为整数或长整数,而不是字符串。