Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Защита ячеек от редактирования. - Мир MS Excel

  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_, DrMini  
Защита ячеек от редактирования.
ronik710 Дата: Четверг, 22.09.2011, 16:20 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 51
Репутация: 0 ±
Замечаний: 0% ±

1). Есть книга "График_работы".
2). В данной книге содержится два листа: "1" и "2". Лист "2" скрыт.
3). На листе "1" есть кнопка с фамилей человека (есть маленький макрос), при нажатии на которую отображается скрытый лист "2" и сразу переходит на него. На листе "2" хранится таблица с графиком работы на текущий месяц (время прихода на работу, время ухода с работы, общее количество часов за день).
4). Нужно, чтобы при нажатии на данную кнопку, было возможно редактирование только той строки, которая связана с текущей датой. А остальные были бы защищены от редактирования. Т.е. человек пришел на работу, открыл таблицу, забил свое время прихода на работу, вечером забил время ухода с работы. А завтра уже не мог изменить время за вчерашний день.
Для наглядности скинул сам файл с таблицей и кнопкой.
К сообщению приложен файл: 7640450.xlsm (16.3 Kb)
 
Ответить
Сообщение1). Есть книга "График_работы".
2). В данной книге содержится два листа: "1" и "2". Лист "2" скрыт.
3). На листе "1" есть кнопка с фамилей человека (есть маленький макрос), при нажатии на которую отображается скрытый лист "2" и сразу переходит на него. На листе "2" хранится таблица с графиком работы на текущий месяц (время прихода на работу, время ухода с работы, общее количество часов за день).
4). Нужно, чтобы при нажатии на данную кнопку, было возможно редактирование только той строки, которая связана с текущей датой. А остальные были бы защищены от редактирования. Т.е. человек пришел на работу, открыл таблицу, забил свое время прихода на работу, вечером забил время ухода с работы. А завтра уже не мог изменить время за вчерашний день.
Для наглядности скинул сам файл с таблицей и кнопкой.

Автор - ronik710
Дата добавления - 22.09.2011 в 16:20
Саня Дата: Четверг, 22.09.2011, 18:03 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
правой кнопкой по ярлыку листа "2" - исходный текс и туда этот код:
[vba]
Код
Private Sub Worksheet_Activate()
      With ActiveSheet
          .Unprotect "1"
          .Cells.Locked = True
            
          Dim r As Integer
          r = .Columns(1).Find(Date).Row
          .Cells(r, 2).Resize(, 2).Locked = False
          .Protect "1"
      End With
End Sub
[/vba]


Сообщение отредактировал Serge_007 - Пятница, 06.02.2015, 22:02
 
Ответить
Сообщениеправой кнопкой по ярлыку листа "2" - исходный текс и туда этот код:
[vba]
Код
Private Sub Worksheet_Activate()
      With ActiveSheet
          .Unprotect "1"
          .Cells.Locked = True
            
          Dim r As Integer
          r = .Columns(1).Find(Date).Row
          .Cells(r, 2).Resize(, 2).Locked = False
          .Protect "1"
      End With
End Sub
[/vba]

Автор - Саня
Дата добавления - 22.09.2011 в 18:03
ronik710 Дата: Понедельник, 26.09.2011, 15:56 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 51
Репутация: 0 ±
Замечаний: 0% ±

Саня, Спасибо большое! Все работает, принцип понятен)
Только есть еще пару нюансов. Если есть возможность, помогите пожалуйста!
1). Хотелось бы выделить красным цветом ячейки, открытые для редактирования (чтобы их можно было легко найти визуально, не ориентируясь на дату).
2). Еще одна сложность в том, что в окончательном виде на листе "2" не одна таблица, а много (конкретно 12, по количеству месяцев в году, первая таблица - январь, вторая - февраль и т.д.). А макрос ссылается только на одну таблицу в листе, при добавлении других таблиц, возникает ошибка. Как это исправить?
Расстояние между таблицами с месяцами - один столбец. Т.е. общее "расстояние" между столбцами с датами - 4 столбца. Для наглядности прикреплю пример с тремя таблицами.
Я так подумал, видимо нужен некий цикл, отсчитывающий столбцы с датами (до обнаружения пустой ячейки)? Реализовать самому не удалось... Помогите пожалуйста!
К сообщению приложен файл: 3568333.xlsm (20.8 Kb)
 
Ответить
СообщениеСаня, Спасибо большое! Все работает, принцип понятен)
Только есть еще пару нюансов. Если есть возможность, помогите пожалуйста!
1). Хотелось бы выделить красным цветом ячейки, открытые для редактирования (чтобы их можно было легко найти визуально, не ориентируясь на дату).
2). Еще одна сложность в том, что в окончательном виде на листе "2" не одна таблица, а много (конкретно 12, по количеству месяцев в году, первая таблица - январь, вторая - февраль и т.д.). А макрос ссылается только на одну таблицу в листе, при добавлении других таблиц, возникает ошибка. Как это исправить?
Расстояние между таблицами с месяцами - один столбец. Т.е. общее "расстояние" между столбцами с датами - 4 столбца. Для наглядности прикреплю пример с тремя таблицами.
Я так подумал, видимо нужен некий цикл, отсчитывающий столбцы с датами (до обнаружения пустой ячейки)? Реализовать самому не удалось... Помогите пожалуйста!

Автор - ronik710
Дата добавления - 26.09.2011 в 15:56
Саня Дата: Понедельник, 26.09.2011, 16:25 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
[vba]
Код
Private Sub Worksheet_Activate()
      With ActiveSheet
          .Unprotect "111"
          With .Cells
              .Locked = True
              .Font.Color = vbBlack
          End With

          Dim r As Range
          Set r = .Cells.Find(Date)

          If r Is Nothing Then
              MsgBox "На листе не найдена текущая дата", vbCritical
          Else
              With r.Offset(, 1).Resize(, 2)
                  .Locked = False
                  .Font.Color = vbRed
                  ActiveSheet.ScrollArea = .Address
                  .Select
              End With
          End If
            
          .Protect "111"
      End With
End Sub
[/vba]
 
Ответить
Сообщение[vba]
Код
Private Sub Worksheet_Activate()
      With ActiveSheet
          .Unprotect "111"
          With .Cells
              .Locked = True
              .Font.Color = vbBlack
          End With

          Dim r As Range
          Set r = .Cells.Find(Date)

          If r Is Nothing Then
              MsgBox "На листе не найдена текущая дата", vbCritical
          Else
              With r.Offset(, 1).Resize(, 2)
                  .Locked = False
                  .Font.Color = vbRed
                  ActiveSheet.ScrollArea = .Address
                  .Select
              End With
          End If
            
          .Protect "111"
      End With
End Sub
[/vba]

Автор - Саня
Дата добавления - 26.09.2011 в 16:25
ronik710 Дата: Вторник, 27.09.2011, 14:07 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 51
Репутация: 0 ±
Замечаний: 0% ±

Саня, Спасибо огромное! Все круто! Даже черезчур круто, пожалуй)
Хотелось бы перемещаться в пространстве листа, однако "ActiveSheet.ScrollArea = .Address" не дает.
Меняю .Address на " ", пропадает защита ячеек (которые не соответствуют сегодняшней дате).
Можно ли решить эту проблему? (я просто хочу вверху листа добавить кнопку для сохранения и возвращания к первому листу, однако в сложившейся ситуации это невозможно сделать)
 
Ответить
СообщениеСаня, Спасибо огромное! Все круто! Даже черезчур круто, пожалуй)
Хотелось бы перемещаться в пространстве листа, однако "ActiveSheet.ScrollArea = .Address" не дает.
Меняю .Address на " ", пропадает защита ячеек (которые не соответствуют сегодняшней дате).
Можно ли решить эту проблему? (я просто хочу вверху листа добавить кнопку для сохранения и возвращания к первому листу, однако в сложившейся ситуации это невозможно сделать)

Автор - ronik710
Дата добавления - 27.09.2011 в 14:07
Саня Дата: Вторник, 27.09.2011, 14:23 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
просто удали эту строку
а для возврата на первый лист можно написать простенький макрос и назначить ему сочетание клавиш, напр., Ctrl+Shift+Z и кнопка не нужна
 
Ответить
Сообщениепросто удали эту строку
а для возврата на первый лист можно написать простенький макрос и назначить ему сочетание клавиш, напр., Ctrl+Shift+Z и кнопка не нужна

Автор - Саня
Дата добавления - 27.09.2011 в 14:23
RAN Дата: Вторник, 27.09.2011, 14:45 | Сообщение № 7
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Если заменить эту строку на
[vba]
Код
ActiveSheet.EnableSelection = xlUnlockedCells
[/vba]
то по листу можно будет и перемещаться и нажимать кнопки, но в защищенную ячейку не попасть.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеЕсли заменить эту строку на
[vba]
Код
ActiveSheet.EnableSelection = xlUnlockedCells
[/vba]
то по листу можно будет и перемещаться и нажимать кнопки, но в защищенную ячейку не попасть.

Автор - RAN
Дата добавления - 27.09.2011 в 14:45
Gidro-perit Дата: Пятница, 06.02.2015, 17:13 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Здравствуйте, столкнулся с такой же проблемой. Есть график выхода на работу и ухода с нее, нужно запретить редактирование данных за прошедшее время. Попробовал сделать так как написано сверху - выдает ошибку скрипта, точнее в фразе .Cells(r; 2) матерится на точку с запятой, говорит Compile error: Expected list separator or ).
 
Ответить
СообщениеЗдравствуйте, столкнулся с такой же проблемой. Есть график выхода на работу и ухода с нее, нужно запретить редактирование данных за прошедшее время. Попробовал сделать так как написано сверху - выдает ошибку скрипта, точнее в фразе .Cells(r; 2) матерится на точку с запятой, говорит Compile error: Expected list separator or ).

Автор - Gidro-perit
Дата добавления - 06.02.2015 в 17:13
RAN Дата: Пятница, 06.02.2015, 18:42 | Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Правильно матерится.
Это скрипт формул постарался. Тема-то древняя, а скрипт молодой.
Замените все ";" на ",".


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеПравильно матерится.
Это скрипт формул постарался. Тема-то древняя, а скрипт молодой.
Замените все ";" на ",".

Автор - RAN
Дата добавления - 06.02.2015 в 18:42
Gidro-perit Дата: Пятница, 06.02.2015, 21:46 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
RAN, Спасибо за помощь, заменил, больше не матерится, но скрип не работает. Сохранил документ (первая колонка с датами от 01.02.2015 до 10.02.2015), открываю (если в 2003 - отключил безопасность в макросах, если в 2010 - при предупреждении наличия макросов разрешаю запуск содержимого), пытаюсь корректировать ячейки второго столбца - разрешает. Пробую по другому - защищаю лист (без пароля). Сохраняю документ, открываю (так же) - теперь редактирование запрещено, даже напротив сегодняшней даты. Суть скрипта понятна, не понимаю почему он не работает.
 
Ответить
СообщениеRAN, Спасибо за помощь, заменил, больше не матерится, но скрип не работает. Сохранил документ (первая колонка с датами от 01.02.2015 до 10.02.2015), открываю (если в 2003 - отключил безопасность в макросах, если в 2010 - при предупреждении наличия макросов разрешаю запуск содержимого), пытаюсь корректировать ячейки второго столбца - разрешает. Пробую по другому - защищаю лист (без пароля). Сохраняю документ, открываю (так же) - теперь редактирование запрещено, даже напротив сегодняшней даты. Суть скрипта понятна, не понимаю почему он не работает.

Автор - Gidro-perit
Дата добавления - 06.02.2015 в 21:46
Gidro-perit Дата: Пятница, 06.02.2015, 21:53 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
RAN, Если можете объясните эту фразу .Cells(r, 2).Resize(, 2).Locked = False
.Cells(r, 2) - означает что берется ячейка с 2 столбца и r-рядка, где r - текущая дата (формат ячейки я задал "дата")
.Locked = False - означает что ячейка становиться не заблокированной, то есть доступна к редактированию.
А вот что делает команда .Resize(, 2) не пойму. Спасибо наперед.
 
Ответить
СообщениеRAN, Если можете объясните эту фразу .Cells(r, 2).Resize(, 2).Locked = False
.Cells(r, 2) - означает что берется ячейка с 2 столбца и r-рядка, где r - текущая дата (формат ячейки я задал "дата")
.Locked = False - означает что ячейка становиться не заблокированной, то есть доступна к редактированию.
А вот что делает команда .Resize(, 2) не пойму. Спасибо наперед.

Автор - Gidro-perit
Дата добавления - 06.02.2015 в 21:53
Nic70y Дата: Пятница, 06.02.2015, 21:59 | Сообщение № 12
Группа: Друзья
Ранг: Экселист
Сообщений: 9132
Репутация: 2415 ±
Замечаний: 0% ±

Excel 2010
А завтра
а кто вчера его будет контролировать?
лично по мне проблема не в excel...


ЮMoney 41001841029809
 
Ответить
Сообщение
А завтра
а кто вчера его будет контролировать?
лично по мне проблема не в excel...

Автор - Nic70y
Дата добавления - 06.02.2015 в 21:59
Gidro-perit Дата: Пятница, 06.02.2015, 22:07 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Nic70y, Проблема в том, что человек, который ведет журнал посещения сегодня может написать одно, а завтра или в конце месяца перед зарплатой) откорректировать прошлые данные. Мне нужно поставить запрет только на "вчера", а на "завтра" - без разницы будет защита или нет.
 
Ответить
СообщениеNic70y, Проблема в том, что человек, который ведет журнал посещения сегодня может написать одно, а завтра или в конце месяца перед зарплатой) откорректировать прошлые данные. Мне нужно поставить запрет только на "вчера", а на "завтра" - без разницы будет защита или нет.

Автор - Gidro-perit
Дата добавления - 06.02.2015 в 22:07
Gidro-perit Дата: Пятница, 06.02.2015, 22:12 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Nic70y, У меня почему-то скрипт не работает....
 
Ответить
СообщениеNic70y, У меня почему-то скрипт не работает....

Автор - Gidro-perit
Дата добавления - 06.02.2015 в 22:12
Nic70y Дата: Пятница, 06.02.2015, 22:12 | Сообщение № 15
Группа: Друзья
Ранг: Экселист
Сообщений: 9132
Репутация: 2415 ±
Замечаний: 0% ±

Excel 2010
[offtop]мне как бывшему заместителю директора по не понятным вопросам смешно Вас слышать - ну уж извините
я не хотел Вас обидеть.
Это чисто человеческий фактор.
они рано или поздно просекут этот момент и научатся обходить его.[/offtop]


ЮMoney 41001841029809
 
Ответить
Сообщение[offtop]мне как бывшему заместителю директора по не понятным вопросам смешно Вас слышать - ну уж извините
я не хотел Вас обидеть.
Это чисто человеческий фактор.
они рано или поздно просекут этот момент и научатся обходить его.[/offtop]

Автор - Nic70y
Дата добавления - 06.02.2015 в 22:12
Gidro-perit Дата: Пятница, 06.02.2015, 22:14 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Nic70y, И все же можете помочь разобраться почему скрипт не работает? версия 2003, защиту листа ставить? Если да, какие разрешения при установке защиты разрешать пользователям? Я разрешаю только выделение.
 
Ответить
СообщениеNic70y, И все же можете помочь разобраться почему скрипт не работает? версия 2003, защиту листа ставить? Если да, какие разрешения при установке защиты разрешать пользователям? Я разрешаю только выделение.

Автор - Gidro-perit
Дата добавления - 06.02.2015 в 22:14
Gidro-perit Дата: Пятница, 06.02.2015, 22:17 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Вот мой файл к примеру.
К сообщению приложен файл: 6755568.xls (14.0 Kb)
 
Ответить
СообщениеВот мой файл к примеру.

Автор - Gidro-perit
Дата добавления - 06.02.2015 в 22:17
Nic70y Дата: Пятница, 06.02.2015, 22:20 | Сообщение № 18
Группа: Друзья
Ранг: Экселист
Сообщений: 9132
Репутация: 2415 ±
Замечаний: 0% ±

Excel 2010
Gidro-perit, извините, но в Вашем файле я ни чего не вижу...(пока писал сообщения выше не было)
Я бы конечно все не так делал.
В основном люди дупля не отстреливают, что и где.
Основной файл по внесению записи запрашивает файл базы данных и вносит в него запись (и стирает свою запись - готово)
(юзер этого не видет)
а Вы уже извлекаете записи из основного файла (и ни какой защиты не надо)


ЮMoney 41001841029809

Сообщение отредактировал Nic70y - Пятница, 06.02.2015, 22:22
 
Ответить
СообщениеGidro-perit, извините, но в Вашем файле я ни чего не вижу...(пока писал сообщения выше не было)
Я бы конечно все не так делал.
В основном люди дупля не отстреливают, что и где.
Основной файл по внесению записи запрашивает файл базы данных и вносит в него запись (и стирает свою запись - готово)
(юзер этого не видет)
а Вы уже извлекаете записи из основного файла (и ни какой защиты не надо)

Автор - Nic70y
Дата добавления - 06.02.2015 в 22:20
Gidro-perit Дата: Пятница, 06.02.2015, 22:23 | Сообщение № 19
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Nic70y, Хорошая мысль, спасибо за подсказку. Сейчас попробую так сделать.
 
Ответить
СообщениеNic70y, Хорошая мысль, спасибо за подсказку. Сейчас попробую так сделать.

Автор - Gidro-perit
Дата добавления - 06.02.2015 в 22:23
Nic70y Дата: Пятница, 06.02.2015, 22:36 | Сообщение № 20
Группа: Друзья
Ранг: Экселист
Сообщений: 9132
Репутация: 2415 ±
Замечаний: 0% ±

Excel 2010
из основного файла

я имел в виду файл базы данных - ну поняли и еще в добавок не мешало бы напротив поставить ТДАТА
тогда точно можно отследить правильность записей

а еще круче макрос одновременно создает файл на текущий момент в укромном месте - тогда контроль еще более усилится


ЮMoney 41001841029809

Сообщение отредактировал Nic70y - Пятница, 06.02.2015, 22:44
 
Ответить
Сообщение
из основного файла

я имел в виду файл базы данных - ну поняли и еще в добавок не мешало бы напротив поставить ТДАТА
тогда точно можно отследить правильность записей

а еще круче макрос одновременно создает файл на текущий момент в укромном месте - тогда контроль еще более усилится

Автор - Nic70y
Дата добавления - 06.02.2015 в 22:36
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!