Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Protect - Unprotect

263
02 апреля 2005 года
koltaviy
816 / / 16.12.2004
Всех с прошедшим праздником!..
У меня опять возник вопрос:
есть код
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Integer, n As Integer
r = Target.Rows.Row
With Sheets("HP")
  .Unprotect
  n = .Range("B1").CurrentRegion.Rows.Count
  If r = n Then
    ...
  End If
  .Protect
End With
End Sub

И есть, к примеру, такой макрос:
 
Код:
Sub Example()
With Sheets("HP")
  .Unprotect
  .Range("B1").Value = 2
  .Range("B2").Value = 3
  .Protect
End With
End Sub

Он выдаст ошибку, и ясно почему, кому не ясно:
после изменения значения ячейки в макросе Example срабатывает событие Worksheet_Change, и следовательно лист опять защищается...
Ясно, что код, мягко говоря, не совсем такой:) , и простым написанием .Unprotect перед повторным изменением не обойтись. Ну в смысле обойтись, но уж очень не резонно прописывать, допустим в 400-строчном коде:)
405
04 апреля 2005 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by koltaviy
Всех с прошедшим праздником!..
У меня опять возник вопрос:
есть код
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Integer, n As Integer
r = Target.Rows.Row
With Sheets("HP")
  .Unprotect
  n = .Range("B1").CurrentRegion.Rows.Count
  If r = n Then
    ...
  End If
  .Protect
End With
End Sub

И есть, к примеру, такой макрос:
 
Код:
Sub Example()
With Sheets("HP")
  .Unprotect
  .Range("B1").Value = 2
  .Range("B2").Value = 3
  .Protect
End With
End Sub

Он выдаст ошибку, и ясно почему, кому не ясно:
после изменения значения ячейки в макросе Example срабатывает событие Worksheet_Change, и следовательно лист опять защищается...
Ясно, что код, мягко говоря, не совсем такой:) , и простым написанием .Unprotect перед повторным изменением не обойтись. Ну в смысле обойтись, но уж очень не резонно прописывать, допустим в 400-строчном коде:)



Можно, например, так:
Sub Example()
With Sheets("HP")
.Unprotect
Application.EnableEvents = False
.Range("B1").Value = 2
.Range("B2").Value = 3
'прочие изменения
Application.EnableEvents = True
.Protect
End With
End Sub

263
05 апреля 2005 года
koltaviy
816 / / 16.12.2004
Цитата:
Originally posted by Dmitrii
Можно, например, так:
Sub Example()
With Sheets("HP")
.Unprotect
Application.EnableEvents = False
.Range("B1").Value = 2
.Range("B2").Value = 3
'прочие изменения
Application.EnableEvents = True
.Protect
End With
End Sub


Спасибо именно это меня и интересовало!... Встречал свойство, но не понимал как именно на практике используется:)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог