Создайте новую книгу Excel и добавьте следующий код к вставленному module1
.
В листе введите:
- «Test FixDate» для ячейки A1.
- Слияние и центр ячеек F1: H1.
- Разблокировать ячейки F1.
- Введите формулу в F1
= Today()
На вкладке формулы определите имя TodaysDate
как $F$1:$H$1
.
Переименуйте лист "Тест"
В окне Immediate введите Protect
и нажмите Enter.
Затем введите FixDate
и нажмите Enter.
Ошибка 1004 во время выполнения в строке:
rng.Locked = True
Обратите внимание, что значение в диапазоне TodaysDate
изменяется на текст, предоставленный окном сообщения, но свойства ячейки диапазона не могут быть изменены, если рабочая таблица не защищена. Я хочу изменить цвет диапазона TodaysDate
, чтобы он соответствовал цвету ячейки A1. Это изменение свойства также завершается с ошибкой во время выполнения 1004. Я исключил попытку из кода при построении примера сделать его максимально простым.
Это ошибка в Excel? или я пропустил некоторые ограничения по настройке свойств диапазона?
Вот код:
Option Explicit
Global Const gPassword As String = "password"
Sub FixDate()
Dim rng As Range
Dim wks As Worksheet
Set wks = Worksheets("Test")
wks.Activate
Set rng = Range("TodaysDate")
If ActiveWorkbook.FileFormat <> xlOpenXMLTemplateMacroEnabled _
And ActiveWorkbook.FileFormat <> xlOpenXMLTemplate _
And ActiveWorkbook.FileFormat <> xlTemplate Then
If Not rng.Locked Then
' Let user change the date; today's date is default
rng.Value = InputBox("Enter competition date (mm/dd/yy), if not today.", Range("A1"), Format(Now(), "mm/dd/yy"))
rng.Copy
rng.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
rng.Locked = True
End If
End If
Application.Goto Reference:=rng, Scroll:=False
Set rng = Nothing
Set wks = Nothing
End Sub
Public Sub ProtectWorkbook(Optional UnProtect As Boolean = False)
'
' Workbook is protected (or optionally unprotected) in such a way as to allow code to change the data
' without unprotecting worksheets but human interface needs password.
'
Dim wks As Worksheet
Dim wksActive As Worksheet
Dim i As Integer
Set wksActive = ActiveSheet
For Each wks In Worksheets
With wks
If .Name = "Roster" Then
On Error Resume Next
.Visible = xlSheetHidden
End If
wks.UnProtect Password:=gPassword
If UnProtect = False Then wks.Protect Password:=gPassword, UserInterfaceOnly:=True
End With
Next wks
Set wks = Nothing
wksActive.Activate
Set wksActive = Nothing
End Sub
Public Sub Protect()
ProtectWorkbook UnProtect:=False
End Sub
Public Sub UnProtect()
ProtectWorkbook UnProtect:=True
End Sub