Excel — добавить пользовательский список сортировки в VBA

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

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

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

"Method 'AddCustomList' of object '_Application' failed".

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

    ' 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]")

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

Как я могу добавить два списка диапазонов?

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
0
817
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Спасибо. Пройдясь по работающему коду - вы были правы - возникла ошибка, поскольку он пытался добавить уже существующую сортировку, поскольку ранее он не удалил ее, как я ожидал.

OWSam 03.06.2019 10:05

Другие вопросы по теме