Excel - добавить пользовательский список сортировки в VBA - PullRequest
1 голос
/ 31 мая 2019

У меня есть код, который сначала обновляет набор данных из ODBC, а затем обновляет несколько сводок, связанных с этими данными.
Сводки должны иметь собственный порядок сортировки, чтобы данные отображались в «правильном» порядке.клиенту.

Заказ сортировки должен быть определен заказчиком и может изменяться в любой момент.Чтобы включить это, я добавил две таблицы с именами групп и кодами счетов на листе настроек.Затем они могут упорядочить строки в этих таблицах в нужном им порядке.
Затем мне нужно добавить данные из этих таблиц в список сортировки, который можно установить в сводных точках.

Я использую Application.AddCustomList, чтобы добавить пользовательский список в Excel.Это работает нормально, если я просто пытаюсь добавить один список, но когда он пытается добавить второй, он выдает ошибку:

"Метод 'AddCustomList' объекта '_Application' не выполнен".

Ниже приведен код:

    ' 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 Ответ

1 голос
/ 31 мая 2019

Ваш код для назначения и использования пользовательских списков работает, но цикл их удаления не работает.
Вы должны шагнуть по списку вниз, чтобы перехватить каждый элемент (нумерация изменяется, если вы удалили один):

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