Требуется ввод (Microsoft Excel)
Когда вы разрабатываете рабочий лист, который будет использоваться другими людьми, вы можете убедиться, что они заполнили определенные ячейки, прежде чем им будет разрешено закрыть книгу. В Excel нет встроенной функции для этого, но вы можете создать макрос, который выполнит необходимую проверку и остановит пользователя для продолжения. Это может быть довольно простой макрос, связанный с событием BeforeClose.
Событие BeforeClose запускается всякий раз, когда книга закрывается любым способом. Уловка заключается в настройке свойства Cancel в обработчике событий. Если для параметра «Отмена» задать значение «Истина», закрытие книги прекратится, а оставление его без изменений приведет к обычному закрытию книги.
Например, следующий макрос проверяет, есть ли что-нибудь в ячейке A1; если это так, то книга закрывается. Если нет, то пользователю сообщается, что чего-то не хватает, и закрытие отменяется.
Private Sub Workbook_BeforeClose(Cancel As Boolean) If Cells(1, 1).Value = "" Then MsgBox "Please fill cell A1" Cancel = True End If End Sub
При желании можно создать более сложные макросы. Например, у вас может быть несколько разных ячеек, которые нужно проверить. Следующая версия проверяет диапазон с именем «Обязательный», чтобы узнать, содержит ли что-нибудь каждая ячейка диапазона. Если какая-либо из ячеек пуста, то книгу нельзя сохранить или закрыть. (Этот макрос запускается не только во время события BeforeClose, но и во время события BeforeSave.)
Эти два обработчика событий должны быть размещены в кодовой таблице для книги:
Private Sub Workbook_BeforeClose(Cancel As Boolean) Cancel = ForceDataEntry() End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _ Cancel As Boolean) Cancel = ForceDataEntry() End Sub
Обратите внимание, что обработчики событий вызывают функцию ForceDataEntry. Эту функцию нужно поместить в обычный макромодуль:
Function ForceDataEntry() As Boolean Dim rng As Range Dim c As Variant Dim rngCount As Integer Dim CellCount As Integer Set rng = Range("Mandatory") rngCount = rng.Count CellCount = 0 For Each c In rng If Len(c) > 0 Then CellCount = CellCount + 1 End If Next c ForceDataEntry = False If CellCount <> rngCount Then ForceDataEntry = True End Function
Следует отметить, что любая реализация, требующая макросов (как эта), страдает одной потенциальной проблемой — пользователи могут решить не включать макросы при загрузке книги. Если они запустят книгу с отключенными макросами, они все равно смогут сохранить книгу без всех обязательных ячеек, содержащих значения.
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (9574) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:
link: / excel-Requiring_Input [Требуется ввод]
.