Защитить содержимое определенных ячеек без защиты рабочего листа

Защитить содержимое определенных ячеек без защиты рабочего листа

У нас есть рабочая книга Excel 2016 с несколькими вкладками, каждая из которых посвящена определенному продавцу. Каждый продавец входит в систему из формы, и его (только его) рабочий лист разблокирован и позволяет редактировать.

Таблица представлена ​​с его прошлыми данными. Ему разрешено обновлять или изменять большую часть своих данных в таблице. Он обновляет определенные ячейки, сохраняет и закрывает рабочую книгу. процесс закрытия wb, блокирует свой лист. Перед тем, как уйти, он может просмотреть другие листы salespeeps, но не может редактировать, потому что они заблокированы.

Теперь загвоздка. На каждом из листов продавцов определенные столбцы (одинаковые для всех продавцов) содержат данные, введенные администратором. Эти данные должны быть видны продавцам, но не должны быть изменены.

Есть ли у вас мысли о том, как защитить определенные столбцы от изменения существующего содержимого на незащищенном листе?

решение1

Не видя кода VBA, трудно определить, как происходит блокировка/разблокировка. Я предполагаю, что это делается путем установки атрибута lockedдля ячейки и использования функции защиты и снятия защиты листа.

Что вам нужно сделать, так это выбрать все продажи, которые разрешены для редактирования, и создать для них Пользовательский диапазон. У меня нет Excel под рукой, но я думаю, что он есть Data> Define Custom RangeИз того же места вы можете выбрать диапазон, который автоматически выберет ячейки в Excel.

В качестве альтернативы работе с пользовательскими диапазонами вы можете выбрать необходимые столбцы, учитывая, что административные данные не находятся в том же столбце. Это позволило бы activesheet.range("K:L").selectсделать возможным.

В коде VBA после разблокировки листа необходимо выбрать этот диапазон и изменить настройки lockedдля этих ячеек, а затем снова защитить лист. При выходе необходимо выполнить обратные действия (снять защиту, установить все заблокированные, защитить).

Чтобы узнать правильный код VBA, выполните действие вручную во время записи макроса и скопируйте код.

решение2

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

  1. на листе продавца установите атрибут блокировки для всего листа как false
  2. в таблице для этого продавца установите атрибут блокировки для всей таблицы как true
  3. Мы создали пользовательский диапазон, как и предлагал LPChip, из всех столбцов, которые мы не хотели бы редактировать никому. Сделали это вручную и присвоили диапазону имя (LockedColumns).
  4. затем защитите лист, это начальное состояние для этого листа и всех других листов продаж.

  5. Продавец входит в систему и, используя правильные учетные данные, попадает на свой лист, где в коде VBA за сценой происходит следующее:

    • Выбираем таблицу и устанавливаем атрибут блокировки на false
    • Выбираем Range.("LockedColumns").select и устанавливаем атрибут блокировки на true.
    • Мы защищаем рабочий лист.

Это позволяет авторизованному salespeep вводить данные в разрешенные нами ячейки и не позволяет ему изменять данные в ячейках, в которых мы не хотим изменений. Продавец может просматривать другие вкладки продаж, но не может вносить изменения. Когда salespeep выходит из системы или закрывается рабочая книга, мы фиксируем перед закрытием и в коде vba, 1. снова выбираем всю таблицу, устанавливаем атрибут блокировки на true, а затем защищаем рабочий лист. Мы сохраняем и затем перенаправляем обратно на вкладку меню для следующего пользователя.

Я был в замешательстве, и LP открыла мне глаза. Спасибо еще раз.

Связанный контент