【问题标题】:Excel - Add Custom Sort List in VBAExcel - 在 VBA 中添加自定义排序列表
【发布时间】:2019-05-31 06:26:15
【问题描述】:

我有一些代码首先刷新来自 ODBC 的一组数据,然后刷新链接到该数据的几个枢轴。
枢轴需要具有自定义排序顺序,以便以“正确”顺序向客户显示数据。

排序顺序需要由客户定义,并且可以随时更改。为此,我在设置工作表上添加了两个包含组名称和帐户代码的表。然后,他们可以按照他们希望的顺序对这些表中的行进行排序。
然后,我需要将这些表中的数据添加到可以在数据透视表上设置的排序列表中。

我正在使用Application.AddCustomList 将自定义列表添加到 Excel 中。如果我只是尝试添加一个列表,这很好用,但是当它尝试添加第二个时,它会出错:

“对象'_Application'的方法'AddCustomList'失败”。

下面是代码:

    ' Deletes old sort orders
        On Error Resume Next
        Dim i As Long
        For i = 1 To Application.CustomListCount
           Application.DeleteCustomList (i)
        Next i

        On Error GoTo 0

    ' Adds custom sort for customers to appplication
        Application.AddCustomList ListArray:=Range("tblSortList[Account Code]")

    ' Gets the number of the custom sorts
        CustomerSortNo = Application.CustomListCount


    ' Adds custom sort for groups to appplication
         Application.AddCustomList ListArray:=Range("tblGroupSort[Group]")


    ' Gets the number of the categorysort
        CategorySortNo = Application.CustomListCount

    ' Sorts the pivots
        Pt.SortUsingCustomLists = True
        PTTotals.SortUsingCustomLists = True
        PTYearGroup.SortUsingCustomLists = True
        PTGroupAvg.SortUsingCustomLists = True


        Pt.PivotFields("Account Code").DataRange.Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=CustomerSortNo + 1  ' +1 as No Calcualtion is number 1.
        PTTotals.PivotFields("Account Code").DataRange.Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=CustomerSortNo + 1  ' +1 as No Calcualtion is number 1


        Pt.PivotFields("Group").DataRange.Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=CategorySortNo + 1  ' +1 as No Calcualtion is number 1.
        PTTotals.PivotFields("Group").DataRange.Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=CategorySortNo + 1  ' +1 as No Calcualtion is number 1
        PTYearGroup.PivotFields("Group").DataRange.Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=CategorySortNo + 1  ' +1 as No Calcualtion is number 1
        PTGroupAvg.PivotFields("Group").DataRange.Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=CategorySortNo + 1  ' +1 as No Calcualtion is number 1

当前会失败就行:Application.AddCustomList ListArray:=Range("tblGroupSort[Group]")

如果我重新排序代码并首先添加组排序列表,它将在帐户代码列表上正常运行并出错。
我尝试将自定义列表的添加分离到每个子列表中,但没有任何区别。

如何添加两个范围列表?

【问题讨论】:

    标签: excel vba pivot-table


    【解决方案1】:

    您分配和使用自定义列表的代码有效,但循环删除它们时无效。
    您必须将列表向下移动以捕获每个元素(编号更改,如果您删除了一个):

    For i = Application.CustomListCount To 1 Step -1
       Application.DeleteCustomList (i)
    Next i
    

    【讨论】:

    • 谢谢。单步执行运行代码 - 你是对的 - 错误正在发生,因为它试图添加一个已经存在的排序,因为它之前没有像我预期的那样删除它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 2016-03-30
    • 1970-01-01
    相关资源
    最近更新 更多