Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 用于排序的Excel常量_Vba_Excel - Fatal编程技术网

Vba 用于排序的Excel常量

Vba 用于排序的Excel常量,vba,excel,Vba,Excel,我正在使用Excel VBA中的排序过程,希望有一个变量集,根据条件将顺序更改为升序或降序。 我尝试了这个,但是得到了一个“类型不匹配”错误 这项工作: Public Enumeration, XlSortOrder, instance Dim instance As XlSortOrder If SBF = 0 Then instance = xlAscending Else: instance = xlDescending End If ActiveWorkbook.Workshe

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

这项工作:

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

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
xlSortNormal
的值也是
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
已声明为整数或长字符,而不是字符串。

此版本中未包含变量声明。唯一的问题是在xlassending和xldestincing之间使用引号。Excel将这些值解释为字符串,而不是排序方法所期望的枚举值。这是假定S是模块中的变量或未声明的变量,没有显式选项。您的代码将无法工作。您已经将枚举、XlSortOrder和实例声明为Variant类型的三个变量。然后,您尝试将实例设置为XlSortOrder类型。这将抛出一个错误。使用
公共实例作为XlSortOrder
,使变量在模块外部可用;或使用
Dim实例作为XlSortOrder
,使其位于模块的本地(或子实例,具体取决于声明的位置)您可以删除常量/枚举值,但我认为它们提供了一个有用的线索,说明代码试图做什么,特别是对于那些不每天使用VBA编写代码或经常使用特定函数的人。这也意味着,在(不太可能)某个值发生变化的情况下,它仍然可以工作。就
线索而言
始终可以对代码进行注释,以便了解这些值的用途。上面的演示是为了说明
xlAscending
xlDescending
是常量而不是字符串:)
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