Стивену необходимо следить за тем, чтобы никто не вводил информацию в рабочий лист с 16:00 до 18:30 каждый день. Он задается вопросом, можно ли использовать проверку данных, чтобы запретить пользователю вводить информацию в рабочий лист в определенное время каждый день.

Есть два основных способа сделать это. Один из подходов — использовать проверку данных, чтобы проверить время и разрешить или запретить ввод данных.

  1. Выделите все ячейки на листе.

  2. Откройте вкладку «Данные» на ленте.

  3. Щелкните инструмент Проверка данных в группе Инструменты для работы с данными. Excel отображает диалоговое окно «Проверка данных». (См. Рис. 1.)

  4. В раскрывающемся списке Разрешить выберите Пользовательский.

  5. В поле Формула введите следующее:

  6. Внесите необходимые изменения на вкладке «Предупреждение об ошибке».

  7. Щелкните ОК.

Проблема с этим подходом заключается в самом первом шаге: вам нужно выбрать все ячейки на листе, чтобы предотвратить ввод данных в любую из них. Кроме того, если вы уже используете проверку данных в любой из ячеек, этот подход перезапишет эти настройки.

По этим причинам может быть лучше использовать подход на основе макросов. Все такие подходы могут использовать обработчики событий для проверки любых изменений. Следующее зависит от события Worksheet_Change, что означает, что оно запускается только тогда, когда Excel обнаруживает изменение на листе.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim sMsg As String

sMsg = "No entries allowed between 4:00 pm and 6:30 pm!"

If Time >= "4:00:00 PM" And Time <= "6:30:00 PM" Then         MsgBox sMsg, vbCritical         With Application             .EnableEvents = False             .Undo   ' This undoes the change the person made             .EnableEvents = True         End With     End If End Sub

По сути, каждый раз, когда на листе происходит изменение, обработчик проверяет, было ли это между 16:00 и 18:30. Если это так, то отображается окно сообщения, указывающее на ошибку, а затем метод .Undo используется для отката любого изменения, которое было предпринято.

Если хотите, вы можете использовать другой подход и защитить лист, если он находится в пределах запрещенного времени:

Private Sub Worksheet_Activate()

If Time >= "4:00:00 PM" And Time <= "6:30:00 PM" Then         ActiveSheet.Protect         MsgBox "Worksheet is protected."

Else         ActiveSheet.Unprotect         MsgBox "You are free to edit now."

End If End Sub

Обработчик событий Worksheet_Activate вызывается каждый раз, когда рабочий лист активируется (выбирается). Если рабочий лист активирован в любое время вне запрещенного времени, то он не защищен. Конечно, пользователь по-прежнему может вручную снять защиту с листа даже в заблокированное время, поэтому рекомендуется использовать этот подход в сочетании с подходом, который запускается каждый раз при попытке изменения, как обсуждалось ранее.

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (13503) применим к Microsoft Excel 2007, 2010, 2013 и 2016.