Страницы: 1
RSS
Макрос сортировки перестал работать
 
Доброго всем вечера.
Есть код для сортировки по алфавиту
Код
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveWorkbook.Worksheets("Товары").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Товары").Sort.SortFields.Add Key:=Range("Товары!$A$5:$I$1000"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Товары").Sort
.SetRange Range("Товары!$A$5:$I$1000")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
'сортировка
Sheets("Товары").Range("Товары!$A$5:$I$1000").Sort Key1:=Sheets("Товары").Range("Товары!$A$5:$I$1000"), _
Order1:=xlAscending, Header:=xlNo
End With
End Sub

Суть вопроса в том, что при работе на защищенном листе или при работе с умной таблицей выдает ошибку и подсвечивает вот эту строку:
Код
Sheets("Товары").Range("Товары!$A$5:$I$1000").Sort Key1:=Sheets("Товары").Range("Товары!$A$5:$I$1000"), _
Order1:=xlAscending, Header:=xlNo

Подскажите, что можно с этим сделать.
 
Снять защиту, отсортировать, включить защиту.
 
А как можно, чтобы это все происходило автоматически, с работой макроса, потому что приходится по несколько сотен наименований вносить, каждый раз снимать вручную и ставить обратно защиту муторно, а еще и с моим склерозом можно про нее вообще забыть. Я в макросах не особо силен. Можно конечно макрорекордером отследить снятие и установку защиты листа и потом вставить в этот код. Куда вставлять я правда не знаю, но думаю что разобраться можно.
Но что вот делать с "умной таблицей" тупому юзеру сообразить ума не хватает.
 
Так ведь установить/снять защиту можно и макросом - зачем вручную? ))  Запишите это макрорекордером и посмотрите код. А ещё почитайте вот эту статью.
 
Юрий М, я понял что можно макросом, я же это и написал в 23:02:31, что отследить снятие и установку защиты макрорекордером и потом вставить код в уже имеющийся. Я думаю, что это несложно, даже для меня далекого.
Но вот с "умной таблицей" не получается ничего сделать, на ней защита не стоит, а ошибку выдает.
 
С умными таблицами мне лично не приходилось программно общаться)) Но знающие люди говорят, что это проблематично. Попробуйте от них отказаться)
 
можно считать все в массив, отсортировать массив и выгрузить обратно
Живи и дай жить..
 
ну или пользоваться для таблицы другим кодом - записать в макрорекордере и обработать напильником
Живи и дай жить..
 
Цитата
можно считать все в массив, отсортировать массив и выгрузить обратно
Слэн, а как это сделать? Потому что я не совсем понимаю о чем вы говорите.
 
считать в массив:
dim ar
ar=range(..)

получаем копию значений листа(из определенного диапазона) в памяти в виде двумерного массива
его можно отсортировать средствами vba - надо искать соответствующие программы в интернете

потом обратно из массива на лист
range(..)=ar

все это не зависит от средств икселя и будет работать
Живи и дай жить..
 
К сожалению я в этом ничего не понимаю. Все равно спасибо. Буду искать альтернативные выходы. :)
Страницы: 1
Наверх