1). Есть книга "График_работы". 2). В данной книге содержится два листа: "1" и "2". Лист "2" скрыт. 3). На листе "1" есть кнопка с фамилей человека (есть маленький макрос), при нажатии на которую отображается скрытый лист "2" и сразу переходит на него. На листе "2" хранится таблица с графиком работы на текущий месяц (время прихода на работу, время ухода с работы, общее количество часов за день). 4). Нужно, чтобы при нажатии на данную кнопку, было возможно редактирование только той строки, которая связана с текущей датой. А остальные были бы защищены от редактирования. Т.е. человек пришел на работу, открыл таблицу, забил свое время прихода на работу, вечером забил время ухода с работы. А завтра уже не мог изменить время за вчерашний день. Для наглядности скинул сам файл с таблицей и кнопкой.
1). Есть книга "График_работы". 2). В данной книге содержится два листа: "1" и "2". Лист "2" скрыт. 3). На листе "1" есть кнопка с фамилей человека (есть маленький макрос), при нажатии на которую отображается скрытый лист "2" и сразу переходит на него. На листе "2" хранится таблица с графиком работы на текущий месяц (время прихода на работу, время ухода с работы, общее количество часов за день). 4). Нужно, чтобы при нажатии на данную кнопку, было возможно редактирование только той строки, которая связана с текущей датой. А остальные были бы защищены от редактирования. Т.е. человек пришел на работу, открыл таблицу, забил свое время прихода на работу, вечером забил время ухода с работы. А завтра уже не мог изменить время за вчерашний день. Для наглядности скинул сам файл с таблицей и кнопкой.ronik710
Саня, Спасибо большое! Все работает, принцип понятен) Только есть еще пару нюансов. Если есть возможность, помогите пожалуйста! 1). Хотелось бы выделить красным цветом ячейки, открытые для редактирования (чтобы их можно было легко найти визуально, не ориентируясь на дату). 2). Еще одна сложность в том, что в окончательном виде на листе "2" не одна таблица, а много (конкретно 12, по количеству месяцев в году, первая таблица - январь, вторая - февраль и т.д.). А макрос ссылается только на одну таблицу в листе, при добавлении других таблиц, возникает ошибка. Как это исправить? Расстояние между таблицами с месяцами - один столбец. Т.е. общее "расстояние" между столбцами с датами - 4 столбца. Для наглядности прикреплю пример с тремя таблицами. Я так подумал, видимо нужен некий цикл, отсчитывающий столбцы с датами (до обнаружения пустой ячейки)? Реализовать самому не удалось... Помогите пожалуйста!
Саня, Спасибо большое! Все работает, принцип понятен) Только есть еще пару нюансов. Если есть возможность, помогите пожалуйста! 1). Хотелось бы выделить красным цветом ячейки, открытые для редактирования (чтобы их можно было легко найти визуально, не ориентируясь на дату). 2). Еще одна сложность в том, что в окончательном виде на листе "2" не одна таблица, а много (конкретно 12, по количеству месяцев в году, первая таблица - январь, вторая - февраль и т.д.). А макрос ссылается только на одну таблицу в листе, при добавлении других таблиц, возникает ошибка. Как это исправить? Расстояние между таблицами с месяцами - один столбец. Т.е. общее "расстояние" между столбцами с датами - 4 столбца. Для наглядности прикреплю пример с тремя таблицами. Я так подумал, видимо нужен некий цикл, отсчитывающий столбцы с датами (до обнаружения пустой ячейки)? Реализовать самому не удалось... Помогите пожалуйста!ronik710
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
Саня, Спасибо огромное! Все круто! Даже черезчур круто, пожалуй) Хотелось бы перемещаться в пространстве листа, однако "ActiveSheet.ScrollArea = .Address" не дает. Меняю .Address на " ", пропадает защита ячеек (которые не соответствуют сегодняшней дате). Можно ли решить эту проблему? (я просто хочу вверху листа добавить кнопку для сохранения и возвращания к первому листу, однако в сложившейся ситуации это невозможно сделать)
Саня, Спасибо огромное! Все круто! Даже черезчур круто, пожалуй) Хотелось бы перемещаться в пространстве листа, однако "ActiveSheet.ScrollArea = .Address" не дает. Меняю .Address на " ", пропадает защита ячеек (которые не соответствуют сегодняшней дате). Можно ли решить эту проблему? (я просто хочу вверху листа добавить кнопку для сохранения и возвращания к первому листу, однако в сложившейся ситуации это невозможно сделать)ronik710
просто удали эту строку а для возврата на первый лист можно написать простенький макрос и назначить ему сочетание клавиш, напр., Ctrl+Shift+Z и кнопка не нужна
просто удали эту строку а для возврата на первый лист можно написать простенький макрос и назначить ему сочетание клавиш, напр., Ctrl+Shift+Z и кнопка не нужнаСаня
Здравствуйте, столкнулся с такой же проблемой. Есть график выхода на работу и ухода с нее, нужно запретить редактирование данных за прошедшее время. Попробовал сделать так как написано сверху - выдает ошибку скрипта, точнее в фразе .Cells(r; 2) матерится на точку с запятой, говорит Compile error: Expected list separator or ).
Здравствуйте, столкнулся с такой же проблемой. Есть график выхода на работу и ухода с нее, нужно запретить редактирование данных за прошедшее время. Попробовал сделать так как написано сверху - выдает ошибку скрипта, точнее в фразе .Cells(r; 2) матерится на точку с запятой, говорит Compile error: Expected list separator or ).Gidro-perit
RAN, Спасибо за помощь, заменил, больше не матерится, но скрип не работает. Сохранил документ (первая колонка с датами от 01.02.2015 до 10.02.2015), открываю (если в 2003 - отключил безопасность в макросах, если в 2010 - при предупреждении наличия макросов разрешаю запуск содержимого), пытаюсь корректировать ячейки второго столбца - разрешает. Пробую по другому - защищаю лист (без пароля). Сохраняю документ, открываю (так же) - теперь редактирование запрещено, даже напротив сегодняшней даты. Суть скрипта понятна, не понимаю почему он не работает.
RAN, Спасибо за помощь, заменил, больше не матерится, но скрип не работает. Сохранил документ (первая колонка с датами от 01.02.2015 до 10.02.2015), открываю (если в 2003 - отключил безопасность в макросах, если в 2010 - при предупреждении наличия макросов разрешаю запуск содержимого), пытаюсь корректировать ячейки второго столбца - разрешает. Пробую по другому - защищаю лист (без пароля). Сохраняю документ, открываю (так же) - теперь редактирование запрещено, даже напротив сегодняшней даты. Суть скрипта понятна, не понимаю почему он не работает.Gidro-perit
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
Nic70y, Проблема в том, что человек, который ведет журнал посещения сегодня может написать одно, а завтра или в конце месяца перед зарплатой) откорректировать прошлые данные. Мне нужно поставить запрет только на "вчера", а на "завтра" - без разницы будет защита или нет.
Nic70y, Проблема в том, что человек, который ведет журнал посещения сегодня может написать одно, а завтра или в конце месяца перед зарплатой) откорректировать прошлые данные. Мне нужно поставить запрет только на "вчера", а на "завтра" - без разницы будет защита или нет.Gidro-perit
[offtop]мне как бывшему заместителю директора по не понятным вопросам смешно Вас слышать - ну уж извините я не хотел Вас обидеть. Это чисто человеческий фактор. они рано или поздно просекут этот момент и научатся обходить его.[/offtop]
[offtop]мне как бывшему заместителю директора по не понятным вопросам смешно Вас слышать - ну уж извините я не хотел Вас обидеть. Это чисто человеческий фактор. они рано или поздно просекут этот момент и научатся обходить его.[/offtop]Nic70y
Nic70y, И все же можете помочь разобраться почему скрипт не работает? версия 2003, защиту листа ставить? Если да, какие разрешения при установке защиты разрешать пользователям? Я разрешаю только выделение.
Nic70y, И все же можете помочь разобраться почему скрипт не работает? версия 2003, защиту листа ставить? Если да, какие разрешения при установке защиты разрешать пользователям? Я разрешаю только выделение.Gidro-perit
Gidro-perit, извините, но в Вашем файле я ни чего не вижу...(пока писал сообщения выше не было) Я бы конечно все не так делал. В основном люди дупля не отстреливают, что и где. Основной файл по внесению записи запрашивает файл базы данных и вносит в него запись (и стирает свою запись - готово) (юзер этого не видет) а Вы уже извлекаете записи из основного файла (и ни какой защиты не надо)
Gidro-perit, извините, но в Вашем файле я ни чего не вижу...(пока писал сообщения выше не было) Я бы конечно все не так делал. В основном люди дупля не отстреливают, что и где. Основной файл по внесению записи запрашивает файл базы данных и вносит в него запись (и стирает свою запись - готово) (юзер этого не видет) а Вы уже извлекаете записи из основного файла (и ни какой защиты не надо)Nic70y
ЮMoney 41001841029809
Сообщение отредактировал Nic70y - Пятница, 06.02.2015, 22:22