Страницы: 1
RSS
Запрет печати при пустых ячейках
 
Доброго времени суток уважаемые форумчане.
Помогите допилить макрос печати, сам не бум-бум в VBA. Макрос был любезно предоставлен одним из участников форума.

Суть проблемы:
Есть макрос печати 2-х накладных, нужно чтоб при пустых(незаполненных) ячейках печать не происходила и выскакивало сообщение о незаполненной накладной или подсвечивало пустую ячейку. Иногда в процессе формирования накладной при длительной работе на автомате пропускаешь и отправляешь на печать не полностью заполненную накладную.
Критерием является заполненные ячейки диапазона B10:B40 и незаполненные ячейки диапазона F10:G40. Например Если в ячейке B10 есть данные, то ячейки F10 или G10 не должны быть пустыми и при печати выводилось сообщение о пустых ячейках, ну или подсвечивало их. Надеюсь правильно объяснил, может в файле будет наглядней. Файл прилагаю. Заранее спасибо.
Изменено: antal10 - 04.03.2016 17:23:37
 
Здравия. Размер бланка всегда фиксированный?

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Да, ничего не меняется. Все находится в этом диапазоне
 
Самое простое в начало макроса:
Код
    With WorksheetFunction
                If .CountA([B10:B40]) * 2 <> .CountA([F10:G40]) Then MsgBox "Заполнены не все поля.": Exit Sub
    End With
Изменено: JayBhagavan - 04.03.2016 18:29:14

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, не работает. Точнее срабатывает даже при заполненной. Меседж выскакивает даже если ячейки заполнены.
Изменено: antal10 - 04.03.2016 18:27:48
 
Исправил. Не заметил объединённых ячеек.
---
Новый вариант. Усложнил (+выделение пустой яч.) в начало макроса:
Код
    bBreak = False
    With WorksheetFunction
        For i = 10 To 40
            cnt = .CountA(Range("B" & i & ",F" & i & ":G" & i))
            If cnt < 3 And cnt > 0 Then
                For Each cl In Range("B" & i & ",F" & i & ":G" & i)
                    If Len(cl.Value) = 0 Then cl.Select: bBreak = True: Exit For
                Next cl
                Exit For
            End If
        Next i
        If bBreak Then
            MsgBox "Заполнены не все поля."
            Exit Sub
        End If
    End With
Изменено: JayBhagavan - 04.03.2016 19:07:35

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Спасибо, так вроде бы работает.
 
Цитата
JayBhagavan написал:
Не заметил объединённых ячеек.
Можно так:
Код
 If Evaluate("COUNTA(b10:B40)") * 2 <> Evaluate("COUNTA(f10:g40)") Then MsgBox "Заполнены не все поля.": Exit Sub
или
 If Evaluate("(COUNTA(b10:B40) * 2) <> COUNTA(f10:g40)") Then MsgBox "Заполнены не все поля.": Exit Sub
Изменено: KuklP - 04.03.2016 20:53:00
Я сам - дурнее всякого примера! ...
 
KuklP, спасибо за предложенный вариант. :)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
KuklP, Спасибо, тоже работает. А что лучше выбрать? Заметил некую разницу между вашим кодом и JayBhagavan, Ваш код также работает, но у JayBhagavan, при нажатии на кнопку ОК в меседжбоксе происходит перерисовка экрана, ну то есть обновление(мерцает), как бы не существенно, но все же.

P.S. Вау JayBhagavan, не заметил, что вы свое сообщение отредактировали и усовершенсвовали макрос. Сразу и не понял, что собственно изменилось, вы написали выделение ячейки происходит. Я то думал что цветом. Вот сижу и жду когда она выделиться. :D Теперь понял, что она становиться просто активной.  :)
Ну в принципе в паре с надстройкой ZVI_CoordSelection от Владимира, вполне даже и подсвечивает. Спасибо большое всем.
 
Цитата
antal10 написал:
А что лучше выбрать?
Разницы в нашем случае никакой. При посимвольной оплате код JayBhagavan гораздо лучше, чем его же код приукрашенный мной ;)
Я сам - дурнее всякого примера! ...
 
Цитата
antal10 написал:  она становиться просто активной
В коде ".Select" - это выделить/выбрать. Там нет "Activate".

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
JayBhagavan написал:
В коде ".Select" - это выделить/выбрать. Там нет "Activate".
Извините JayBhagavan, не так выразился, просто я еще не очень разбираюсь. В любом случае спасибо, помогли решить вопрос.
KuklP, тоже огромное спасибо, кстати если не изменяет память, могу конечно ошибиться, но макрос печати в файле вроде бы ваш. Давно это было, не помню, боюсь кого-то обидеть.
Изменено: antal10 - 05.03.2016 00:38:19
 
antal10, извиняться не за что. Я просто обосновал почему написал "выделение". Пожалуйста.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Подскажите пожалуйста, как в условии указать отдельные ячейки, а не диапазон?

UPD:
Разобрался
Изменено: v310 - 25.10.2016 17:53:31
Страницы: 1
Наверх