这个vba语法是什么?

时间:2017-11-24 12:26:28

标签: arrays vba excel-vba sorting excel

我收到了一份电子表格,供同事查看,我发现这是一个宏观

    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失败的方法范围”错误。

简而言之:方括号是真正的语法,如果是,他们试图做什么?

2 个答案:

答案 0 :(得分:2)

代码没有问题。它实际上是代码的一部分,它按升序对date列上的表进行排序。

见这个例子。

  1. 我们假设您有一个名为Outstanding_Work_DB
  2. 的工作表
  3. 我们假设您有一张名为BS_Outsanding_Work
  4. 的表格
  5. 让我们说你的表看起来像这样
  6. enter image description here

    如果您希望按日期升序对该表进行排序,那么您将使用此代码

    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对象
    • 第二部分:创建新的排序字段
    • 第三部分:应用排序

    代码运行后

    enter image description here

    希望这有帮助。

答案 1 :(得分:0)

这段代码正在向表中添加排序说明。要执行排序,您可以使用:

ActiveWorkbook.Worksheets("Outstanding_Work_DB").ListObjects("BS_Outsanding_Work").Sort.Apply

由于它在Range部分失败,我想象'日期'列不再存在或已被重命名。