Vba 用于排序的Excel常量
我正在使用Excel VBA中的排序过程,希望有一个变量集,根据条件将顺序更改为升序或降序。 我尝试了这个,但是得到了一个“类型不匹配”错误 这项工作: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
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