Страницы: 1
RSS
Обязательное заполнение ячеек при условии
 
Всем доброго времени суток.
Возможно ли путем не сложных комбинаций не сохранять книгу если определенные ячейки не заполнены?
Если это реализовать сложно, то просто подсвечивать не заполненные ячейки красным.
Собственно задача, при заполнении ФИО необходимо также заполнить и следующие ячейки в строке,
Если же дети по адресу не проживают или пустая строка то заполнять естественно не надо.
Файл приложил.
 
Здравствуйте. Про не сохранять книгу не знаю, а условное форматирование и + формулы в примечании в файле.
 
Цитата
Николай написал: путем не сложных комбинаций
не сложный макрос. в модуль ЭтаКнига. Заполнение граф Учебное учреждение и Класс не отслеживается (т.к. их может не быть)
офф. цыгане
Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim cl As Range
With Worksheets("Микроучасток")
    lRow = .Cells(.Rows.Count, 3).End(xlUp).Row
    For Each cl In .Range("C4:C" & lRow).Cells
        If cl <> Empty And Not cl Like "*проживают*" Then
            For I = 2 To 5 Step 3
                If cl.Offset(, I) = Empty Then
                    MsgBox "Не заполнена графа '" & .Cells(3, cl.Offset(, I).Column).Text & "' для " & cl & " !", vbCritical + vbOKOnly
                    Exit Sub
                End If
            Next
        End If
    Next
End With
End Sub
Изменено: Sanja - 17.09.2016 11:14:45
Согласие есть продукт при полном непротивлении сторон
 
Спасибо огромное. Красиво сделано.
Но мне прям отлично подходит вариант от Sanja,
Только...
Цитата
Sanja написал:
Учебное учреждение не отслеживается
А можно чтоб отслеживался? Потому как там выбор обязателен.
А на счет класса верно подмечено, и цыгана я исправил. :-)
А если еще он будет блокировать редактирование пока макросы не разрешены (и оповещать об этом пользователя), цены этому решению не будет.
Изменено: Николай - 17.09.2016 14:32:27
 
Не силен я в макросах. Сделал чтоб пропускало 4 строку вот таким вот образом.
Изменено: Николай - 17.09.2016 19:35:03
 
для Учебного учреждения можно так
Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim cl As Range
With Worksheets("Микроучасток")
    lRow = .Cells(.Rows.Count, 3).End(xlUp).Row
    For Each cl In .Range("C4:C" & lRow).Cells
        If cl <> Empty And Not cl Like "*проживают*" Then
            For I = 2 To 5
                If I <> 4 And cl.Offset(, I) = Empty Then
                    MsgBox "Не заполнена графа '" & .Cells(3, cl.Offset(, I).Column).Text & "' для " & cl & " !", vbCritical + vbOKOnly
                    Exit Sub
                End If
            Next
        End If
    Next
End With
End Sub
про разрешение макросов надо подумать
Изменено: Sanja - 17.09.2016 19:53:04
Согласие есть продукт при полном непротивлении сторон
 
Вот тема
Еще материал
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
про разрешение макросов надо подумать
Вот что нашел я.
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=52246&TITLE_SEO=52246
Но подогнать под себя не могу...
Не могу разобраться в коде.
Sanja, скажи честно обучиться VBA самостоятельно возможно? или только через институт (ну или курсы)
Сколько не пытаюсь, ни как не могу осилить, (html куды как проще и понятнее.)
 
Цитата
Николай написал: обучиться VBA самостоятельно возможно?
Вполне. На этом форуме большинство таких. Я тоже сам осваивал
Цитата
Николай написал: подогнать под себя не могу
Про какой код речь? Что Вы хотите? Мой не подошел?
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал: Про какой код речь?
Про тот который выводит сообщение при открытии файла если отключены макросы.
Мол чтобы начать работать с файлом нужно разрешить макросы. (а другие листы при этом скрыты)
Цитата
Sanja написал: Я тоже сам осваивал
Не ну а база то какая-то была?
Мобыть вы программист и на С++ кодите. :-)
И еще вопрос если разрешите, вот например код из 6-го сообщения вы руками набирали? или есть что-то типа конструктора ну или редактора.
Ведь если руками то это весьма сложно, не дай бог запятую забыл или пробел лишний поставил.
 
Цитата
Николай написал:
при открытии файла если отключены макросы
Почитайте эту эту статью.  
 
Цитата
Sanja написал: Еще материал
Цитата
Юрий М написал: Почитайте эту  эту  статью.
Снова сделал как там сказано И ... о чудо, заработало, а до этого не хотело, видать то ли копировал не верно то ли еще чего.
Неа не работает. Сообщение мелькает и тут же пропадает. при этом макросы не выполняются Запуск макросов отключен.
При этом становятся видимыми скрытые мною листы.
Изменено: Николай - 17.09.2016 23:41:06
 
?
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Николай написал: Неа не работает
По указанной ссылке есть ведь пример - скачайте его, посмотрите, как работает и где какие макросы находятся...
 
Разобрался с макросами, походу ексель 2013 запоминает, то что я разрешил макросы в этом файле и больше не спрашивает.
Открыл на другом компе запрос появился.
Но тут еще один вопрос на рисовался:

Что-то никак не пойму то ли у меня эксель тупит то ли еще чего.
При закрытии книги, нажатие на крестик, выскакивает сообщение мол не заполнена ячейка, НО при этом происходит сохранение книги.
легко проверить написав в какой либо ячейке "чего нибудь" и закрыть книгу.
Считаю нужно блокировать закрытие книги.

Добавил в код сокрытие листа "вводные" и выбор листа "микроучасток".
Изменено: Николай - 18.09.2016 08:37:28
 
Цитата
Николай написал:
при этом происходит сохранение книги
После MsgBox(перед Exit Sub) надо добавить еще строку:
Код
Cancel = True
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist,
При много благодарен. Как раз то что надо.
 
Всем доброго дня! Как сделать чтоб данный макрос:
1) Работал на каждом листе отдельно и не конфликтовал с другими макросами.
2) Гении VBA помогите пожалуйста.  :)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim cl As Range
With Worksheets("Микроучасток")
   lRow = .Cells(.Rows.Count, 3).End(xlUp).Row
   For Each cl In .Range("C4:C" & lRow).Cells
       If cl <> Empty And Not cl Like "*проживают*" Then
           For I = 1 To 8
               If cl.Offset(, I) = Empty Then
                   MsgBox "Не заполнена графа '" & .Cells(3, cl.Offset(, I).Column).Text & "' для " & cl & " !", vbCritical + vbOKOnly
                   Exit Sub
               End If
           Next
       End If
   Next
End With
End Sub
Изменено: Egor87 - 19.10.2023 10:56:59
Страницы: 1
Читают тему
Наверх