Когда вы разрабатываете рабочий лист, который будет использоваться другими людьми, вы можете убедиться, что они заполнили определенные ячейки, прежде чем им будет разрешено закрыть книгу. В 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 [Требуется ввод].