Спасибо за советы. сделал следующее, но если дата не обновлялась, последний лист при открытии остается не защищенным. Даже если его защитить и сохранить, при открытии он снова разблокирован. Где ошибка подскажите пожалуйста? Насколько я понял, если дата не изменилась, макрос не завершается и не блокирует активный лист документ. Если дата изменилась, создается новый лист и блокируется. Но при последующем открытии в течении дня, опять перестает блокироваться.
[vba]
Код
Private Sub Workbook_Open() ActiveSheet.Unprotect Password:="123" Dim sh As Worksheet, rng As Range Dim D As String, D1$, i% D = Format(Date, "DD.MM") For Each sh In Worksheets If sh.Name = D Then Exit Sub Next MsgBox "Сейчас будет добавлен новый лист c текущей датой.""" & D & """", vbInformation ' вывод сообщения можно закомментировать Do i = i + 1 D1 = Format(Date - i, "DD.MM") For Each sh In Worksheets If sh.Name = D1 Then Exit Do Next Loop Sheets(D1).Copy After:=Sheets(D1) Set sh = Sheets(Sheets(D1).Index + 1) With sh .Name = D .Range("V5:AA36").Value = 0 Set rng = .Cells.Find(What:="'*'!", LookIn:=xlFormulas, LookAt:=xlPart) If Not rng Is Nothing Then .Cells.Replace What:=Left(rng.Formula, InStr(rng.Formula, "!") - 1), Replacement:="='" & D1 & "'", LookAt:=xlPart ActiveSheet.Protect Password:="123" End If End With
End Sub
[/vba] Заранее благодарю.
Спасибо за советы. сделал следующее, но если дата не обновлялась, последний лист при открытии остается не защищенным. Даже если его защитить и сохранить, при открытии он снова разблокирован. Где ошибка подскажите пожалуйста? Насколько я понял, если дата не изменилась, макрос не завершается и не блокирует активный лист документ. Если дата изменилась, создается новый лист и блокируется. Но при последующем открытии в течении дня, опять перестает блокироваться.
[vba]
Код
Private Sub Workbook_Open() ActiveSheet.Unprotect Password:="123" Dim sh As Worksheet, rng As Range Dim D As String, D1$, i% D = Format(Date, "DD.MM") For Each sh In Worksheets If sh.Name = D Then Exit Sub Next MsgBox "Сейчас будет добавлен новый лист c текущей датой.""" & D & """", vbInformation ' вывод сообщения можно закомментировать Do i = i + 1 D1 = Format(Date - i, "DD.MM") For Each sh In Worksheets If sh.Name = D1 Then Exit Do Next Loop Sheets(D1).Copy After:=Sheets(D1) Set sh = Sheets(Sheets(D1).Index + 1) With sh .Name = D .Range("V5:AA36").Value = 0 Set rng = .Cells.Find(What:="'*'!", LookIn:=xlFormulas, LookAt:=xlPart) If Not rng Is Nothing Then .Cells.Replace What:=Left(rng.Formula, InStr(rng.Formula, "!") - 1), Replacement:="='" & D1 & "'", LookAt:=xlPart ActiveSheet.Protect Password:="123" End If End With
Не подскажите, в таком случае если дата не менялась то все ок. Но если дата поменялась создался новый лист и потом защитился новый, а старый остался не закрытым. Как сделать что бы закрывался и новый активный и старый.
Не подскажите, в таком случае если дата не менялась то все ок. Но если дата поменялась создался новый лист и потом защитился новый, а старый остался не закрытым. Как сделать что бы закрывался и новый активный и старый.brewer
Зачем вообще снимать защиту со старого листа? Вы его скопировали и уже на новом листе снимаете защиту, добавляете формулы и снова ставите защиту [vba]
Код
With sh .Unprotect Password:="123" .Name = D .Range("V5:AA36").Value = 0 Set rng = .Cells.Find(What:="'*'!", LookIn:=xlFormulas, LookAt:=xlPart) If Not rng Is Nothing Then .Cells.Replace What:=Left(rng.Formula, InStr(rng.Formula, "!") - 1), Replacement:="='" & D1 & "'", LookAt:=xlPart End If .Protect Password:="123" End With
[/vba]
Зачем вообще снимать защиту со старого листа? Вы его скопировали и уже на новом листе снимаете защиту, добавляете формулы и снова ставите защиту [vba]
Код
With sh .Unprotect Password:="123" .Name = D .Range("V5:AA36").Value = 0 Set rng = .Cells.Find(What:="'*'!", LookIn:=xlFormulas, LookAt:=xlPart) If Not rng Is Nothing Then .Cells.Replace What:=Left(rng.Formula, InStr(rng.Formula, "!") - 1), Replacement:="='" & D1 & "'", LookAt:=xlPart End If .Protect Password:="123" End With