Блокировка ячеек на книге Открыть
Особенности
- Чтобы запустить следующий (или любой) макрос при открытии книги, у вас есть
использовать его событие Workbook_Open. В VBA дважды щелкните ThisWorkbook. В
в первом раскрывающемся списке выберите «Рабочая книга», а во втором выберите «Открыть».
- Для каждого листа в книге, содержащей этот макрос, снимите защиту
это и разблокирует все клетки. Затем проверяет указанный диапазон строк для дат
и блокирует ячейки целых столбцов, где сегодняшняя дата не была найдена.
Наконец защищает рабочий лист.
- Кроме того, цвет внутри будет отличаться в клетках, где
сегодняшняя дата была найдена.
Ссылки
Загрузка рабочей книги (Dropbox)
Код
Стандартный модуль, например, Module1
Sub ProtectPrevious()
Const cRow As Long = 5 ' Date Row Number
Const cFirstC As Variant = 7 ' First Column Letter/Number e.g. 7 or "G"
Const cToday As Long = 6 ' Today Cell ColorIndex e.g. 6 is Yellow
Const cDays As Long = 15 ' Other Days ColorIndex e.g. 15 is some Gray
Dim ws As Worksheet ' Current Worksheet
Dim LastC As Long ' Last Column Number
Dim j As Integer ' Column Counter
For Each ws In ThisWorkbook.Worksheets
With ws
' Prepare for processing.
.Unprotect Password:="123456"
.Cells.Locked = False
' When there is no data in Date Row, continue with next worksheet.
If .Rows(cRow).Find("*", .Cells(cRow, _
.Columns.Count), -4123, , 1) Is Nothing Then Exit For
' Calculate Last Column Number
LastC = .Rows(cRow).Find("*", , -4123, , 1, 2).Column
' Remove formatting from other day(s) in Date Row.
With .Range(.Cells(cRow, cFirstC), .Cells(cRow, LastC))
.Interior.ColorIndex = cDays
End With
' Loop through columns: from First Column to Last Column.
For j = cFirstC To LastC
If .Cells(cRow, j) <> Date Then
.Columns(j).Locked = True
Else
' Apply formatting to 'today' in Date Row.
With .Cells(cRow, j)
.Interior.ColorIndex = cToday
End With
End If
Next
.Protect Password:="123456"
End With
Next
End Sub
ThisWorkbook
Private Sub Workbook_Open()
ProtectPrevious
End Sub