Требуется ввод (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.) Два обработчика событий помещаются в код для книги, а макрос ForceDataEntry помещается в обычный модуль макроса.
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
Sub 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 If End Sub
Следует отметить, что любая реализация, требующая макросов (как эта), страдает одной потенциальной проблемой — пользователи могут решить не включать макросы при загрузке книги. Если они запустят книгу с отключенными макросами, они все равно смогут сохранить книгу без всех обязательных ячеек, содержащих значения.
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (9572) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и более поздних версий) здесь:
link: / excelribbon-Requiring_Input [Требуется ввод]
.