1

我在 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
4

2 回答 2

3

这有效:

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
于 2012-08-01T20:05:04.927 回答
0

xlAscending并且xlDescending是 Excel 常量。要查看他们的值,只需在“立即”窗口中打印即可。请参阅下面的快照。

在此处输入图像描述

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

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

同样,xlSortOnValues和的值xlSortNormal0。如果你愿意,你也可以把上面的代码写成

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已被声明为 Integer 或 Long 而不是 String。

于 2012-08-02T02:08:23.580 回答