Страницы: 1
RSS
Вывод сообщения о незаполненной ячейке с указанием строки, наименования столбца и адреса ячейки
 
Добрый день уважаемые форумчане,
прошу помочь в следующем:

Версия ЭКСЕЛЬ 2013 ПРОФЕССИОНАЛЬНЫЙ ПЛЮС

Имеется Таблица 1 на Листе 1 содержащая колонки:
1. Порядковый номер строки
2. Фамилия
3. Имя
4. Отчество
5. Год рождения
Таблица 1 может изменяться в размере в нее могут быть добавлены, а могут быть удалены позиции.

Необходимо вывести макрос, который будет проверять все содержащиеся в Таблице 1 ячейки и перед отправкой на печать будет выводить сообщения о незаполненных ячейках и запретит распечатывать покуда они не будут заполнены, для данного примера:
"Вы не указали ИМЯ во 2-й строке Таблицы. Ячейка Е5" жмем ОК
следущее сообщение:
"Вы не указали ФАМИЛИЮ в 3-й строке Таблицы. Ячейка D6" жмем ОК
следущее сообщение:
"Вы не указали ДАТУ РОЖДЕНИЯ в 3-й строке Таблицы. Ячейка G6" жмем ОК

И так для всех значений которыми будет наполняться Таблица 1.
 
Проверьте
Код
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim iTbl As ListObject
Dim cl As Range
Dim iClm&, iRow&
Set iTbl = Worksheets("Лист1").ListObjects("Таблица1")
For Each cl In iTbl.DataBodyRange.Cells
    If cl.Value = Empty Then
        iClm = cl.Column - iTbl.DataBodyRange(1, 1).Column + 1
        iRow = cl.Row - iTbl.HeaderRowRange.Row
        MsgBox "Вы не указали: " & vbCrLf & _
                iTbl.HeaderRowRange(, iClm) & vbCrLf & _
                "Строка: " & iRow & vbCrLf & _
                "Адрес: " & cl.Address, , _
                "Отмена печати"
        Cancel = True
        cl.Select
        Exit Sub
    End If
Next
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Код
Private Sub Workbook_BeforePrint(NotPrint As Boolean)
  Dim rg As Range, fb As Range
  Set rg = DataSht.[c3].CurrentRegion
  If WorksheetFunction.CountBlank(rg) > 0 Then
    Set fb = rg.SpecialCells(xlCellTypeBlanks).Cells(1):  NotPrint = True
    MsgBox "см. строка № " & fb.Row - rg.Row & " таблицы, поле:  " & _
    DataSht.Cells(rg.Row, fb.Column), , "Таблица не ЗАПОЛНЕНА!!!"
  End If
End Sub
Изменено: Ігор Гончаренко - 10.04.2018 10:27:51
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Еще вариант:
Код
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Dim i As Long, j As Long, s As String, a()
    With Sheets("Лист1")
        a = .Range("C4:G" & .Cells(Rows.Count, 3).End(xlUp).Row).Value
        For j = 2 To UBound(a, 2)
            For i = 1 To UBound(a, 1)
                If a(i, j) = "" Then
                    s = Switch(j = 2, "ФАМИЛИЮ", j = 3, "ИМЯ", j = 4, "ОТЧЕСТВО", j = 5, "ДАТУ РОЖДЕНИЯ")
                    MsgBox "Вы не указали " & s & " в строке " & a(i, 1) & " Таблицы. Ячейка " & _
                        .Cells(i + 3, j + 2).Address(RowAbsolute:=False, ColumnAbsolute:=False)
                    Cancel = True: Exit Sub
                End If
            Next
        Next
    End With
End Sub
Пример во вложении.
Чем шире угол зрения, тем он тупее.
 
Огромное спасибо за большое количество предложений, но SAS888 был ближе всех.
Огромная ему благодарность )))  
Страницы: 1
Наверх