У меня есть код, который сначала обновляет набор данных из 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]")
Если я изменю порядок кода и сначала добавлю список групповой сортировки, он будет работать нормально и выдаст ошибку в списке учетных кодов.
Я попытался выделить добавление пользовательского списка в подпрограмму для каждого, но это не имело никакого значения.
Как я могу добавить два списка диапазонов?
Ваш код для назначения и использования пользовательских списков работает, но цикл их удаления — нет. Вам нужно переместить список вниз, чтобы поймать каждый элемент (нумерация изменится, если вы удалили один):
For i = Application.CustomListCount To 1 Step -1
Application.DeleteCustomList (i)
Next i
Спасибо. Пройдясь по работающему коду - вы были правы - возникла ошибка, поскольку он пытался добавить уже существующую сортировку, поскольку ранее он не удалил ее, как я ожидал.