我收到了一份电子表格,供同事查看,我发现这是一个宏观
ActiveWorkbook.Worksheets("Outstanding_Work_DB").ListObjects( _
"BS_Outsanding_Work").Sort.SortFields.Add Key:=Range( _
"BS_Outsanding_Work[[#All],[Date]]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortTextAsNumbers
这是真正的语法吗?我在vba中从未见过这样的东西。
更具体地说,这部分令我感到困惑:
Add Key:=Range( _
"BS_Outsanding_Work[[#All],[Date]]")
电子表格几乎已经完成了他们想要的所有操作,但是这段代码没有运行,它会抛出“对象_global失败的方法范围”错误。
简而言之:方括号是真正的语法,如果是,他们试图做什么?
答案 0 :(得分:2)
代码没有问题。它实际上是代码的一部分,它按升序对date
列上的表进行排序。
见这个例子。
Outstanding_Work_DB
BS_Outsanding_Work
表
如果您希望按日期升序对该表进行排序,那么您将使用此代码
Sub Sample()
'~~> PART 1
ActiveWorkbook.Worksheets("Outstanding_Work_DB").ListObjects("BS_Outsanding_Work").Sort. _
SortFields.Clear
'~~> PART 2
ActiveWorkbook.Worksheets("Outstanding_Work_DB").ListObjects("BS_Outsanding_Work").Sort. _
SortFields.Add Key:=Range("BS_Outsanding_Work[[#All],[Date]]"), SortOn:= _
xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
'~~> PART 3
With ActiveWorkbook.Worksheets("Outstanding_Work_DB").ListObjects("BS_Outsanding_Work").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
<强>解释强>
SortFields.Clear
清除所有SortFields
个对象。 SortFields集合是SortField对象的集合。它允许开发人员在工作簿,列表和自动过滤器上存储排序状态。
ListObjects("Outstanding_Work_DB")
是您的Excel表格。
SortFields.Add
创建一个新的排序字段并返回一个SortFields对象。
Range("BS_Outsanding_Work[[#All],[Date]]")
表示在日期字段(包括标题)上对所有表进行排序。在立即窗口中尝试以下两行代码:)
?Range("BS_Outsanding_Work[[#All],[Date]]").Address
?Range("BS_Outsanding_Work[Date]").Address
Order:=xlAscending
是不言自明的。排序必须按升序排列。
代码的最后一部分应用代码
简而言之
SortFields
对象代码运行后
希望这有帮助。
答案 1 :(得分:0)
这段代码正在向表中添加排序说明。要执行排序,您可以使用:
ActiveWorkbook.Worksheets("Outstanding_Work_DB").ListObjects("BS_Outsanding_Work").Sort.Apply
由于它在Range
部分失败,我想象'日期'列不再存在或已被重命名。