Страница 1 из 1

Помогите! Excel: обязательные ячейки?

Добавлено: 14 ноя 2008, 11:14
shao
ДОбрый день, подскажите пожалуйста как в Excel'е сделать ячийки обязательные для заполнения?

Пример:

если А1 не пустое (что-то ввели), то B1 и С1 тоже должны быть не пустыми,т.е обязательно заполнены, иначе сохрнить файл нельзя.

Кто подскажет?

Спасибо.

Андрей.

Re: Помогите! Excel: обязательные ячейки?

Добавлено: 14 ноя 2008, 13:10
AlexZZZ
Вот этот код поместите в модуль книги:

Код: Выделить всё

Private Sub workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
If Len(Worksheets("Лист1").Cells(1, 1).Value) > 0 And (Len(Worksheets("Лист1").Cells(1, 2).Value) = 0 _
    Or Len(Worksheets("Лист1").Cells(1, 3).Value) = 0) Then
    MsgBox "Невозможно сохранить документ!" & Chr(10) & "Заполните ячейки «B1» и «С1»."
    Cancel = True
End If
End Sub

Re: Помогите! Excel: обязательные ячейки?

Добавлено: 14 ноя 2008, 15:44
shao
Спасибо, но почему-то пока не получается, не реагирует, разбираюсь..

А еще вопросик, а если у меня ячейка не только а А1, а может быть и А3 и А100, то как код поправить?
Спасибо

Re: Помогите! Excel: обязательные ячейки?

Добавлено: 14 ноя 2008, 17:35
shao
Спасибо! всё работает уже!

Re: Помогите! Excel: обязательные ячейки?

Добавлено: 15 ноя 2008, 12:16
AlexZZZ
&quot писал(а):А еще вопросик, а если у меня ячейка не только а А1, а может быть и А3 и А100, то как код поправить?
Всё просто: Ссылка на ячейку "Cells(номер_строки, номер_столбца)". Дальше всё зависит от Вашей задачи. Можете отслеживать изменения и на всём листе. Например так. Создайте модуль и вставьте в начало:

Код: Выделить всё

Option Explicit
Global TargetRow As Long
В модуль книги вставьте:

Код: Выделить всё

Option Explicit
Private Sub workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If TargetRow > 0 Then
        If Len(Cells(TargetRow, 1).Value) > 0 And (Len(Cells(TargetRow, 2).Value) = 0 Or Len(Cells(TargetRow, 3).Value) = 0) Then
            MsgBox "Невозможно сохранить документ!" & Chr(10) & "Заполните ячейки «B" & TargetRow & "» и «С" & TargetRow & "»."
            Cancel = True
        End If
    End If
End Sub
А в модуль листа (или листов), на которых нужно отследивать изменения:

Код: Выделить всё

Option Explicit
Sub Worksheet_Change(ByVal Target As Range)
    If TargetRow > 0 And Target.Row <> TargetRow Then
        If Len(Cells(TargetRow, 1).Value) > 0 And (Len(Cells(TargetRow, 2).Value) = 0 Or Len(Cells(TargetRow, 3).Value) = 0) Then
            MsgBox "Заполните ячейки «B" & TargetRow & "» и «С" & TargetRow & "»."
            Application.EnableEvents = False
            Application.Undo
            Application.EnableEvents = True
            Exit Sub
        End If
    End If
    TargetRow = Target.Row
End Sub

Re: Помогите! Excel: обязательные ячейки?

Добавлено: 17 ноя 2008, 10:11
shao
Спасибо! Все работает!