Страницы: 1
RSS
Ошибка 438 при выполнении макросов сортировки
 
Есть файл с макросами. Есть кнопка с макросом, который выполняет еще кучу макросов (решение не элегантное, но нет времени и желания делать красиво).
При нажатии на кнопку должен выполнится пакет макросов (в основном сортировка) и в результате открыться окно для сохранения csv.
Работает только на половине компов. На некоторых компах сразу появляется ошибка 438. Дебаг показывает ошибку в первой сортировке.
Трудность отладки в том, что на моих компах работает. А у клиентов нет. И надо починить за эти выходные. А тут самоизоляция.
Зависимости от версии офиса и разрядности системы не нашел.

Из загугленых способов решения пробовал удаление файлов .exd. - не помогает.

Сам файл больше 100 кб и не могу загрузить сюда. Доступен по ссылке: гугл диск

Текст макроса куда отправляет дебаг:
Код
Sub Sort()
'
' Sort Макрос
'

'
    ActiveWindow.SmallScroll Down:=87
    Range("Таблица2[#All]").Select
    Range("J101").Activate
    ActiveWorkbook.Worksheets("Скопируйте заявки сюда").ListObjects("Таблица2"). _
        Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Скопируйте заявки сюда").ListObjects("Таблица2"). _
        Sort.SortFields.Add2 Key:=Range("Таблица2[Линия]"), SortOn:=xlSortOnValues _ 
        , Order:=xlAscending, DataOption:=xlSortNormal                                  *показывает ошибку тут
    ActiveWorkbook.Worksheets("Скопируйте заявки сюда").ListObjects("Таблица2"). _
        Sort.SortFields.Add2 Key:=Range("Таблица2[Час подачі корму]"), SortOn:= _
        xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Скопируйте заявки сюда").ListObjects("Таблица2"). _
        Sort.SortFields.Add2 Key:=Range("Таблица2[Длительность]"), SortOn:= _
        xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Скопируйте заявки сюда").ListObjects("Таблица2" _
        ).Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    ActiveWindow.SmallScroll Down:=-114
End Sub

 
Я решил убрав 2 в Sort.SortFields.Add2.
 
Hugo, спасибо! это помогло.

Метод Add2 был добавлен в 2016 году.
Метод Add2 включает поддержку сортировки для подполя из типов данных, таких как география или акции.
Если это не требуется, то можно использовать метод Add.
 
Цитата
написал:
Я решил убрав 2 в Sort.SortFields.Add2.
А как быть если второй метод необходим?

Столкнулась с той же проблемой. На моем компе все идеально работает, а у конечного пользователя таблицы - нет.
Button1 - срабатывает безотказно.
Button2 - не срабатывает на другой машине.
Помогите пожалуйста решить проблему.


Private Sub CommandButton1_Click()
If Me.OptionButton1.Value = True Then
'Сортировка в алфавите
    Range("B5:GI3504").Select
   ActiveWorkbook.Worksheets("База").Sort.SortFields.Clear
   ActiveWorkbook.Worksheets("База").Sort.SortFields.Add Key:=Range( _
       "B5:B3504"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
       xlSortNormal
   With ActiveWorkbook.Worksheets("База").Sort
       .SetRange Range("B5:GI3504")
       .Header = xlGuess
       .MatchCase = False
       .Orientation = xlTopToBottom
       .SortMethod = xlPinYin
       .Apply
   End With
     Range("B5").Select
   
   Unload Me
          End If
         
         
   If Me.OptionButton2.Value = True Then
'Сортировка в инвентарном порядке
   Range("B5:GI3504").Select
   ActiveWorkbook.Worksheets("База").Sort.SortFields.Clear
   ActiveWorkbook.Worksheets("База").Sort.SortFields.Add2 Key:=Range( _
       "GI5:GI3505"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
       xlSortTextAsNumbers
   ActiveWorkbook.Worksheets("База").Sort.SortFields.Add2 Key:=Range("D5:D3505" _
       ), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
   With ActiveWorkbook.Worksheets("База").Sort
       .SetRange Range("B5:GI3504")
       .Header = xlGuess
       .MatchCase = False
       .Orientation = xlTopToBottom
       .SortMethod = xlPinYin
       .Apply
  End With
   Range("B5").Select
   
   Unload Me
          End If
Страницы: 1
Наверх