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

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
shao
Сообщения: 19
Зарегистрирован: 27 мар 2008, 12:19

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

Пример:

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

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

Спасибо.

Андрей.
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

Вот этот код поместите в модуль книги:

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

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
shao
Сообщения: 19
Зарегистрирован: 27 мар 2008, 12:19

Спасибо, но почему-то пока не получается, не реагирует, разбираюсь..

А еще вопросик, а если у меня ячейка не только а А1, а может быть и А3 и А100, то как код поправить?
Спасибо
shao
Сообщения: 19
Зарегистрирован: 27 мар 2008, 12:19

Спасибо! всё работает уже!
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

&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
shao
Сообщения: 19
Зарегистрирован: 27 мар 2008, 12:19

Спасибо! Все работает!
Ответить