Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2019, 14:15   #1
Brewer
Новичок
Джуниор
 
Регистрация: 31.10.2019
Сообщений: 2
По умолчанию Как макросом снять и поставить защиту с листа

Есть книга, в которой макрос создает каждый новый день новый лист.
В этом листе часть ячеек открыта, часть закрыта для редактирования.
Задача макроса при открывании книги, снять защиту с листа, если дата изменилась создать новый лист, и защитить новый лист от редактирования.
Если дата не менялась, по просто защитить лист от редактирования.
Временное снятие защиты нужно что бы макрос смог создать новый лист и скопировать часть данный со листа предыдущего дня.

Надеюсь я изложил задачу
Сейчас макрос снимает защиту, создает лист и ставит защиту обратно. Но если дата не менялась, то как я понял он снимает защиту, и далее не выполняет обратное закрытие листа. Как сделать что бы защита всегда была установлена на все листы.

Код:
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
Заранее спасибо.

Последний раз редактировалось Brewer; 31.10.2019 в 15:37. Причина: Уточнил вопрос
Brewer вне форума Ответить с цитированием
Старый 31.10.2019, 14:53   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

сможете обьяснить, что пытаетесь сделать, скорее всего, Вам смогут обьяснить как это сделать
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 31.10.2019, 15:33   #3
Brewer
Новичок
Джуниор
 
Регистрация: 31.10.2019
Сообщений: 2
По умолчанию

Изменил первоначальный вопрос

Последний раз редактировалось Brewer; 31.10.2019 в 15:39. Причина: Изменил первоначальный вопрос
Brewer вне форума Ответить с цитированием
Старый 31.10.2019, 16:58   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Private Sub Workbook_Open()
  Dim d$, ws As Worksheet, i&
  d = Format(Date, "DD.MM")
  For Each ws In Worksheets
    If ws.Name = d Then Exit Sub
  Next
  Do
    i = i + 1: d = Format(Date - i, "DD.MM")
    For Each ws In Worksheets
      If ws.Name = d Then
        ws.Unprotect Pasword:="123": ws.Copy After:=ws
        ws.Protect Pasword = "123"
        ActiveSheet.Protect Pasword:="123":   Exit Sub
      End If
    Next
  Loop
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
надо снять защиту Kulan Фриланс 1 17.12.2016 22:07
снять защиту с VBA ravdev Microsoft Office Excel 2 24.02.2016 23:07
снять защиту maksim_serg Windows 11 20.12.2014 16:09
В книге защищен каждый лист. Как быстро снять защиту со всех листов, а потом ее поставить опять? Катик7 Microsoft Office Excel 13 28.04.2011 16:02
При создании нового листа программно поставить на него защиту (с помощью VBA) Lis000iq Microsoft Office Excel 2 30.06.2009 18:41