Excel-在VBA中添加自定义排序列表

时间:2019-05-31 06:26:16

标签: excel vba pivot-table

我有一些代码,该代码首先从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]")

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

如何添加两个范围列表?

1 个答案:

答案 0 :(得分:0)

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

$start_str_date = strtotime($start_date);
$end_str_date = strtotime($end_date);
$interval_days = $end_str_date - $start_str_date;
$days = gmdate('d',$interval_days);
echo $days;