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
Protect - Unprotect
У меня опять возник вопрос:
есть код
Код:
И есть, к примеру, такой макрос:
Код:
Sub Example()
With Sheets("HP")
.Unprotect
.Range("B1").Value = 2
.Range("B2").Value = 3
.Protect
End With
End Sub
With Sheets("HP")
.Unprotect
.Range("B1").Value = 2
.Range("B2").Value = 3
.Protect
End With
End Sub
Он выдаст ошибку, и ясно почему, кому не ясно:
после изменения значения ячейки в макросе Example срабатывает событие Worksheet_Change, и следовательно лист опять защищается...
Ясно, что код, мягко говоря, не совсем такой:) , и простым написанием .Unprotect перед повторным изменением не обойтись. Ну в смысле обойтись, но уж очень не резонно прописывать, допустим в 400-строчном коде:)
Цитата:
Originally posted by koltaviy
Всех с прошедшим праздником!..
У меня опять возник вопрос:
есть код
И есть, к примеру, такой макрос:
Он выдаст ошибку, и ясно почему, кому не ясно:
после изменения значения ячейки в макросе Example срабатывает событие Worksheet_Change, и следовательно лист опять защищается...
Ясно, что код, мягко говоря, не совсем такой:) , и простым написанием .Unprotect перед повторным изменением не обойтись. Ну в смысле обойтись, но уж очень не резонно прописывать, допустим в 400-строчном коде:)
Всех с прошедшим праздником!..
У меня опять возник вопрос:
есть код
Код:
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
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
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
Цитата:
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
Можно, например, так:
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
Спасибо именно это меня и интересовало!... Встречал свойство, но не понимал как именно на практике используется:)