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

Вход

Регистрация

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

 

= Мир MS Excel/Фиксация значения ячейки альтернативным способом - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Фиксация значения ячейки альтернативным способом (Формулы)
Фиксация значения ячейки альтернативным способом
balancea Дата: Вторник, 26.11.2013, 12:51 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 60% ±

Excel 2013
Существует ли альтернативный способ зафиксировать значение ячейки (запретить внесение изменений) кроме выставление параметров защиты листа? В каком случае это необходимо?

К вопросу прикладываю файл. В нем в столбцах D, F, H с помощью макроса автоматически проставляется время, при внесении значения в соседнюю слева ячейку.

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

Нужен альтернативный способ запретить изменения значений этих столбцов, после того как макрос проставил в них время.

Спасибо. Надеюсь это поможет другим пользователям тоже.

P.S. Макрос на проставление времени следующий (возможно в нем как раз и стоит прописать запрет на изменение/удаление значений):

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Intersect(Me.UsedRange, Me.[C:C,E:E,G:G], Target) Is Nothing Then Exit Sub
Target.Next = IIf(Target = "", "", Now)
End Sub
[/vba]
К сообщению приложен файл: ___.xlsm (59.6 Kb)
 
Ответить
СообщениеСуществует ли альтернативный способ зафиксировать значение ячейки (запретить внесение изменений) кроме выставление параметров защиты листа? В каком случае это необходимо?

К вопросу прикладываю файл. В нем в столбцах D, F, H с помощью макроса автоматически проставляется время, при внесении значения в соседнюю слева ячейку.

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

Нужен альтернативный способ запретить изменения значений этих столбцов, после того как макрос проставил в них время.

Спасибо. Надеюсь это поможет другим пользователям тоже.

P.S. Макрос на проставление времени следующий (возможно в нем как раз и стоит прописать запрет на изменение/удаление значений):

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Intersect(Me.UsedRange, Me.[C:C,E:E,G:G], Target) Is Nothing Then Exit Sub
Target.Next = IIf(Target = "", "", Now)
End Sub
[/vba]

Автор - balancea
Дата добавления - 26.11.2013 в 12:51
Hugo Дата: Вторник, 26.11.2013, 13:01 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Здесь нет однозначного ответа.
1. Если макросом нужно изменять защищённые ячейки - можно макросом снять защиту, изменить ячейку, вернуть защиту.
2. Можно проанализировать изменяемый диапазон - и если он входит в контролируемый, то сделать undo (в случае ручного изменения ячеек).
3. ну вероятно можно придумать ещё что-то, в зависимости от задачи.

Но лучше делать по первому варианту - запишите рекордером снятие и установку защиты, используйте полученный код.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеЗдесь нет однозначного ответа.
1. Если макросом нужно изменять защищённые ячейки - можно макросом снять защиту, изменить ячейку, вернуть защиту.
2. Можно проанализировать изменяемый диапазон - и если он входит в контролируемый, то сделать undo (в случае ручного изменения ячеек).
3. ну вероятно можно придумать ещё что-то, в зависимости от задачи.

Но лучше делать по первому варианту - запишите рекордером снятие и установку защиты, используйте полученный код.

Автор - Hugo
Дата добавления - 26.11.2013 в 13:01
balancea Дата: Вторник, 26.11.2013, 13:24 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 60% ±

Excel 2013
Hugo, спасибо за оперативный ответ.

Вероятно, я произвел впечатление человека, который хорошо разбирается в возможностях Excel и работе с макросами VBA.

Однако, к сожалению, я просто обезьяна, которой дали готовый макрос и она его радостно использует. Поэтому я буду крайне признателен, если кто-нибудь поможет решить эту небольшую проблемку языком, более доступным для представителя отряда приматов. Возможно, я не один такой.

hands
 
Ответить
СообщениеHugo, спасибо за оперативный ответ.

Вероятно, я произвел впечатление человека, который хорошо разбирается в возможностях Excel и работе с макросами VBA.

Однако, к сожалению, я просто обезьяна, которой дали готовый макрос и она его радостно использует. Поэтому я буду крайне признателен, если кто-нибудь поможет решить эту небольшую проблемку языком, более доступным для представителя отряда приматов. Возможно, я не один такой.

hands

Автор - balancea
Дата добавления - 26.11.2013 в 13:24
Alex_ST Дата: Среда, 27.11.2013, 15:51 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Ну, вот так, например, попробуйте:[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Me.Unprotect ' снять защиту листа
    Dim rRng As Range: Set rRng = Me.[C:C,E:E,G:G] ' так просто удобнее, чтобы диапазон можно было задавать и изменять в одном месте
    Me.Cells.Locked = False ' сделать все ячейки листа не защищаемыми
    rRng.Offset(, 1).Locked = True ' сделать ячейки столбцов правее rRng защищаемыми
    If Target.Count > 1 Then Exit Sub
    If Intersect(Me.UsedRange, rRng, Target) Is Nothing Then Exit Sub
    Target.Next = IIf(Target = "", "", Now)
    Me.Protect Contents:=True ' защитить лист
End Sub
[/vba](было немного свободного времени, расписал с комментариями "более доступным языком")



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеНу, вот так, например, попробуйте:[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Me.Unprotect ' снять защиту листа
    Dim rRng As Range: Set rRng = Me.[C:C,E:E,G:G] ' так просто удобнее, чтобы диапазон можно было задавать и изменять в одном месте
    Me.Cells.Locked = False ' сделать все ячейки листа не защищаемыми
    rRng.Offset(, 1).Locked = True ' сделать ячейки столбцов правее rRng защищаемыми
    If Target.Count > 1 Then Exit Sub
    If Intersect(Me.UsedRange, rRng, Target) Is Nothing Then Exit Sub
    Target.Next = IIf(Target = "", "", Now)
    Me.Protect Contents:=True ' защитить лист
End Sub
[/vba](было немного свободного времени, расписал с комментариями "более доступным языком")

Автор - Alex_ST
Дата добавления - 27.11.2013 в 15:51
balancea Дата: Пятница, 29.11.2013, 12:41 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 60% ±

Excel 2013
Alex_ST, спасибо, таким образом это работает для защиты данных столбцов. Однако, в таком случае я не учел одну вещь в своем вопросе. Помимо защиты столбцов, где проставляется время (которые благодаря этому макросу теперь защищены), у меня на листе стоит еще защита множества других диапазонов ячеек, чтобы пользователь не мог их случайно удалить-изменить. И при использовании макроса, который ты написал, защита с других ячеек слетает. Возможно ли ее как то учесть в коде?
 
Ответить
СообщениеAlex_ST, спасибо, таким образом это работает для защиты данных столбцов. Однако, в таком случае я не учел одну вещь в своем вопросе. Помимо защиты столбцов, где проставляется время (которые благодаря этому макросу теперь защищены), у меня на листе стоит еще защита множества других диапазонов ячеек, чтобы пользователь не мог их случайно удалить-изменить. И при использовании макроса, который ты написал, защита с других ячеек слетает. Возможно ли ее как то учесть в коде?

Автор - balancea
Дата добавления - 29.11.2013 в 12:41
Alex_ST Дата: Пятница, 29.11.2013, 19:58 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Ну я же специально комментарии написал поподробнее … :(
А мозги включить трудно?
Я-то старался научить, а Вы, оказывается, за готовым решением пришли >(
Ну уж ладно... Назвался клизмой, полезай в …
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
     Me.Unprotect ' снять защиту листа
     If Target.Count > 1 Then Exit Sub
     If Intersect(Me.UsedRange, Me.[C:C,E:E,G:G], Target) Is Nothing Then Exit Sub
     Target.Next = IIf(Target = "", "", Now)
     Me.Protect Contents:=True ' защитить лист
End Sub
[/vba]



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеНу я же специально комментарии написал поподробнее … :(
А мозги включить трудно?
Я-то старался научить, а Вы, оказывается, за готовым решением пришли >(
Ну уж ладно... Назвался клизмой, полезай в …
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
     Me.Unprotect ' снять защиту листа
     If Target.Count > 1 Then Exit Sub
     If Intersect(Me.UsedRange, Me.[C:C,E:E,G:G], Target) Is Nothing Then Exit Sub
     Target.Next = IIf(Target = "", "", Now)
     Me.Protect Contents:=True ' защитить лист
End Sub
[/vba]

Автор - Alex_ST
Дата добавления - 29.11.2013 в 19:58
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Фиксация значения ячейки альтернативным способом (Формулы)
  • Страница 1 из 1
  • 1
Поиск:

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