В EXCEL (неважно в каком). Есть некая ТАБЛИЦА, в которой часть данных в некоторые СТОЛБЦЫ вводятся в ручную, а часть обрабатывает введенные данные и выдает результат. (следовательно, те ЯЧЕЙКИ где есть формулы необходимо защитить), затем защищаем ЛИСТ.... ТЕПЕРЬ ПРОБЛЕМА: Необходимо сортировать данные ТАБЛИЦЫ (с учетом заблокированных ячеек), но это НЕВОЗМОЖНО (Даже если при защите ЛИСТА установить ВСЕ ГАЛОЧКИ,т.е. дать полное разрешение)
Люди есть мысли, как заставить работать сортировку?
В EXCEL (неважно в каком). Есть некая ТАБЛИЦА, в которой часть данных в некоторые СТОЛБЦЫ вводятся в ручную, а часть обрабатывает введенные данные и выдает результат. (следовательно, те ЯЧЕЙКИ где есть формулы необходимо защитить), затем защищаем ЛИСТ.... ТЕПЕРЬ ПРОБЛЕМА: Необходимо сортировать данные ТАБЛИЦЫ (с учетом заблокированных ячеек), но это НЕВОЗМОЖНО (Даже если при защите ЛИСТА установить ВСЕ ГАЛОЧКИ,т.е. дать полное разрешение)
Люди есть мысли, как заставить работать сортировку?Catand76
Век живи - век учись
Сообщение отредактировал Catand76 - Среда, 04.07.2018, 12:11
Все прекрасно работает. Помимо необходимых для остальной работы нужно поставить только одну дополнительную галку - "Использование автофильтра". На вкладке Данные кнопки автофильтра засерятся (неактивными станут), но сам автофильтр (стрелочки) работать будет и в обычных таблицах и в умных
Все прекрасно работает. Помимо необходимых для остальной работы нужно поставить только одну дополнительную галку - "Использование автофильтра". На вкладке Данные кнопки автофильтра засерятся (неактивными станут), но сам автофильтр (стрелочки) работать будет и в обычных таблицах и в умных_Boroda_
boa, Это был бы выход если 1 человек пользуется (тогда вообще нет смысла блокировать), но проблема в том, что файлом пользуется N кол-во человек и данные влияют на другие файлы и графики.... Файл уже слишком "большой" и тормозит на слабых машинах, а если еще раз ввести дубль всех таблиц (их не 1 и не 2....) будет вообще не камильфо.... Сейчас защита листа снята и мне приходится по 1-2 разу в неделю восстанавливать формулы и УФ.... P.S. "Безбожники" лезут туда, куда Макар телят не гонял... иногда мне прямо интересно. что творится в их головах, чтоб так извращенно ломать связи в формулах???
boa, Это был бы выход если 1 человек пользуется (тогда вообще нет смысла блокировать), но проблема в том, что файлом пользуется N кол-во человек и данные влияют на другие файлы и графики.... Файл уже слишком "большой" и тормозит на слабых машинах, а если еще раз ввести дубль всех таблиц (их не 1 и не 2....) будет вообще не камильфо.... Сейчас защита листа снята и мне приходится по 1-2 разу в неделю восстанавливать формулы и УФ.... P.S. "Безбожники" лезут туда, куда Макар телят не гонял... иногда мне прямо интересно. что творится в их головах, чтоб так извращенно ломать связи в формулах???Catand76
Catand76, формулы можно перенести в менеджер имен и скрыть их там, а в ячейках использовать лишь имена Формула1, Формула2 и т.д. Пускай потом голову ломают, что и как считается а файл пересохраните в бинарном формате и он значительно "подусохнет"
Catand76, формулы можно перенести в менеджер имен и скрыть их там, а в ячейках использовать лишь имена Формула1, Формула2 и т.д. Пускай потом голову ломают, что и как считается а файл пересохраните в бинарном формате и он значительно "подусохнет"boa
Сообщение отредактировал boa - Среда, 04.07.2018, 14:20
если остальные юзеры не вносят данные, то еще вариант - создать пользовательского клиента, т.е. основной файл у вас в пользовании, а у остальных книга с коннектами к этому файлу. Либо установить пароль на редактирование книги.
если остальные юзеры не вносят данные, то еще вариант - создать пользовательского клиента, т.е. основной файл у вас в пользовании, а у остальных книга с коннектами к этому файлу. Либо установить пароль на редактирование книги.boa
Сообщение отредактировал boa - Среда, 04.07.2018, 14:26
Не, вот ну ничего себе? Вы переписали свой первый пост, поменяли название темы (было "Фильтр заблокированного листа"), везде фильтр заменили на сотрировку. И как теперь выглядит мой ответ? Первая мысль - что за дебил, его спрашивают про сотрировку, а он отвечает про фильтр. Нужно было или новую тему создавать, или в следующем посте написать, что перепутали.
Макросом вот так можно Оранжевая кнопка паролит лист для пользователя, но не для макроса. При необходимости снимаем пароль вручную. Пароль q1. Можно поменять - в макросе предпоследняя строка. По выбору пользователя или плавающий делать не стал - забудете, потом придется ломать. А так всегда в коде макроса посмотреть можно, туда ж никто больше не полезет, правильно? Заленая кнопка сортирует данные по столбцу, в котором находится левая верхняя ячейка выделенного диапазона. Предполагается, что в таблице есть шапка в одну строку. Ескейп, крестик или "Отмена" - выход из макроса [vba]
Код
Sub Sortir() Dim d As Range, d0 As Range Set d0 = Selection(1) сb_ = Replace(Cells(1, d0.Column).Address(0, 0), 1, "") s_ = MsgBox("Столбец '" & сb_ & "' сортируем по возрастанию?", vbYesNoCancel, "Сортировка по столбцу " & сb_) If s_ < 6 Then Exit Sub or_ = s_ - 5 On Error Resume Next Set d = d0.CurrentRegion Set d = d.Offset(1).Resize(d.Rows.Count - 1) With ActiveSheet.Sort.SortFields .Clear .Add Key:=d0, Order:=or_ With .Parent .SetRange d .Apply End With End With d0.Select End Sub
Sub Parol() ActiveSheet.Protect userInterfaceOnly:=True, Password:="q1" End Sub
[/vba]
Не, вот ну ничего себе? Вы переписали свой первый пост, поменяли название темы (было "Фильтр заблокированного листа"), везде фильтр заменили на сотрировку. И как теперь выглядит мой ответ? Первая мысль - что за дебил, его спрашивают про сотрировку, а он отвечает про фильтр. Нужно было или новую тему создавать, или в следующем посте написать, что перепутали.
Макросом вот так можно Оранжевая кнопка паролит лист для пользователя, но не для макроса. При необходимости снимаем пароль вручную. Пароль q1. Можно поменять - в макросе предпоследняя строка. По выбору пользователя или плавающий делать не стал - забудете, потом придется ломать. А так всегда в коде макроса посмотреть можно, туда ж никто больше не полезет, правильно? Заленая кнопка сортирует данные по столбцу, в котором находится левая верхняя ячейка выделенного диапазона. Предполагается, что в таблице есть шапка в одну строку. Ескейп, крестик или "Отмена" - выход из макроса [vba]
Код
Sub Sortir() Dim d As Range, d0 As Range Set d0 = Selection(1) сb_ = Replace(Cells(1, d0.Column).Address(0, 0), 1, "") s_ = MsgBox("Столбец '" & сb_ & "' сортируем по возрастанию?", vbYesNoCancel, "Сортировка по столбцу " & сb_) If s_ < 6 Then Exit Sub or_ = s_ - 5 On Error Resume Next Set d = d0.CurrentRegion Set d = d.Offset(1).Resize(d.Rows.Count - 1) With ActiveSheet.Sort.SortFields .Clear .Add Key:=d0, Order:=or_ With .Parent .SetRange d .Apply End With End With d0.Select End Sub
Sub Parol() ActiveSheet.Protect userInterfaceOnly:=True, Password:="q1" End Sub
что бы Sortir работал :), не забудьте добавить в модуль книги [vba]
Код
Private Sub Workbook_Open() Call Parol End Sub
[/vba]
Зачем? На всякий случай запаролить лист при открытии книги конечно хорошо (но не поможет - до того, как понадобится сортировка, работника все равно забудут включить макросы), но работа Сортира никак с этим не связана. Вы случайно не перепутали UserInterfaceOnly с EnableOutlining?
А вот на случай, если админ Catand76 снял пароль, что-то поменял и забыл поставить его обратно, я бы написал принудительную установку на событие закрытия книги (с учетом того, что админ-то уж точно не забудет макросы включить) [vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) Parol End Sub
[/vba] Можно, конечно, заставлять пользователя включить макросы, но это уже отдельная тема, которая, кстати, неоднократно уже обсуждалась здесь
что бы Sortir работал :), не забудьте добавить в модуль книги [vba]
Код
Private Sub Workbook_Open() Call Parol End Sub
[/vba]
Зачем? На всякий случай запаролить лист при открытии книги конечно хорошо (но не поможет - до того, как понадобится сортировка, работника все равно забудут включить макросы), но работа Сортира никак с этим не связана. Вы случайно не перепутали UserInterfaceOnly с EnableOutlining?
А вот на случай, если админ Catand76 снял пароль, что-то поменял и забыл поставить его обратно, я бы написал принудительную установку на событие закрытия книги (с учетом того, что админ-то уж точно не забудет макросы включить) [vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) Parol End Sub
[/vba] Можно, конечно, заставлять пользователя включить макросы, но это уже отдельная тема, которая, кстати, неоднократно уже обсуждалась здесь_Boroda_
Дык это первое, что я сделал, когда Ваш пост увидел. Все нормально работало. А сейчас перегрузил Excel и да, без оранжевой кнопки зеленая не срабатывает. Чудеса
Доделал еще всякие мелочи и дописал дополнение от boa. В итоге вот так получилось
Дык это первое, что я сделал, когда Ваш пост увидел. Все нормально работало. А сейчас перегрузил Excel и да, без оранжевой кнопки зеленая не срабатывает. Чудеса
Доделал еще всякие мелочи и дописал дополнение от boa. В итоге вот так получилось_Boroda_
_Boroda_, это не чудеса. userInterfaceOnly действует в пределах одного сеанса, в параметрах защиты листа данное не сохраняется. если выполнить код при открытии книги, то все работает, если после открытия книги данная комманда не отработала, то Оно = False рад был быть полезным
_Boroda_, это не чудеса. userInterfaceOnly действует в пределах одного сеанса, в параметрах защиты листа данное не сохраняется. если выполнить код при открытии книги, то все работает, если после открытия книги данная комманда не отработала, то Оно = False рад был быть полезным boa
Сообщение отредактировал boa - Среда, 04.07.2018, 22:39
userInterfaceOnly действует в пределах одного сеанса
Не согласен. Она действует в пределах одной книги - пока книга открыта. При закрытии сбрасывается. Сеанс (если под словом "сеанс" Вы подразумеваете сеанс Excel) здесь ни при чем. А на работе у меня просто Excel загадочный. Дома, кстати, тоже, но уже по-другому.
userInterfaceOnly действует в пределах одного сеанса
Не согласен. Она действует в пределах одной книги - пока книга открыта. При закрытии сбрасывается. Сеанс (если под словом "сеанс" Вы подразумеваете сеанс Excel) здесь ни при чем. А на работе у меня просто Excel загадочный. Дома, кстати, тоже, но уже по-другому._Boroda_
_Boroda_, Спасибо большое.... Для меня макрос - темный лес.... но буду разбираться и запиливать под свои потребности (вот если еще напротив каждой строки в макросе поставите примечание, будет вообще GOOD)
_Boroda_, Спасибо большое.... Для меня макрос - темный лес.... но буду разбираться и запиливать под свои потребности (вот если еще напротив каждой строки в макросе поставите примечание, будет вообще GOOD)Catand76
Век живи - век учись
Сообщение отредактировал Catand76 - Четверг, 05.07.2018, 02:56
Ребята, а можно макрос упростить? Вот вводные: Вешаем на экран кнопку "сортировка" При нажатии на кнопку. 1. Снимается защита листа. 2. Сортируется "по возрастанию" Столбец "[3]" в умной "Таблице1" 3. Лист снова защищается.
Ребята, а можно макрос упростить? Вот вводные: Вешаем на экран кнопку "сортировка" При нажатии на кнопку. 1. Снимается защита листа. 2. Сортируется "по возрастанию" Столбец "[3]" в умной "Таблице1" 3. Лист снова защищается.Catand76
Век живи - век учись
Сообщение отредактировал Catand76 - Четверг, 05.07.2018, 09:10
Catand76, для сортировки не надо снимать защиту. вы можете кнопку установки защиты вообще убрать с листа, т.к. защита будет установлена при закрытии/открытии файла если макросы включены. можете еще и на событие сохранения устанавливать защиту листа [vba]
Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Parol End Sub
[/vba]
Catand76, для сортировки не надо снимать защиту. вы можете кнопку установки защиты вообще убрать с листа, т.к. защита будет установлена при закрытии/открытии файла если макросы включены. можете еще и на событие сохранения устанавливать защиту листа [vba]
Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Parol End Sub