Private Sub workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) On Error Resume Next: res = ActiveCell.Validation.Type Dim cl As Range With Worksheets("Лист3") lRow = .Cells(.Rows.Count, 1).End(xlUp).Row For Each cl In .Range("B4989:b" & lRow).Cells If cl <> Empty And Not cl Like "*Резерв*" Then For i = 0 To 12 If i <> 13 And cl.Offset(, i) = Empty Then MsgBox "Реестр средств измерений, не заполнена ячейка '" & .Cells(10, cl.Offset(, i).Column).Text & "' для " & cl & " !", vbCritical + vbOKOnly Cancel = True Exit Sub End If Next End If Next End With With Worksheets("Лист2") lRow = .Cells(.Rows.Count, 1).End(xlUp).Row For Each cl In .Range("C8327:C" & lRow).Cells If cl <> Empty And Not cl Like "*Резерв*" Then For i = 0 To 8 If i <> 8 And cl.Offset(, i) = Empty Then MsgBox "Журнал поверки,не заполнена ячейка '" & .Cells(10, cl.Offset(, i).Column).Text & "' для " & cl & " !", vbCritical + vbOKOnly .Cells(10, cl.Offset(, i).Column).Select Cancel = True End If Next End If Next End With With Worksheets("Лист3") lRow = .Cells(.Rows.Count, 1).End(xlUp).Row For Each cl In .Range("B12841:b" & lRow).Cells If cl <> Empty And Not cl Like "*Резерв*" Then For i = 0 To 8 If i <> 3 And cl.Offset(, i) = Empty Then MsgBox "Журнал эксплуатации, не заполнена ячейка '" & .Cells(10, cl.Offset(, i).Column).Text & "' для " & cl & " !", vbCritical + vbOKOnly .Cells(10, cl.Offset(, i).Column).Select Cancel = True Exit Sub End If Next End If Next End With
End Sub
[/vba]
Форумчане, всем доброго дня! Есть такой макрос, помогите прописать в него команду, чтоб он перед или после [vba]
[/vba] перекидывал на ячейку которую нужно заполнить. И второй момент, не могу понять почему макрос не отрабатывет первую часть макроса, начиная с "Лита2" работает нормально.
[vba]
Код
Private Sub workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) On Error Resume Next: res = ActiveCell.Validation.Type Dim cl As Range With Worksheets("Лист3") lRow = .Cells(.Rows.Count, 1).End(xlUp).Row For Each cl In .Range("B4989:b" & lRow).Cells If cl <> Empty And Not cl Like "*Резерв*" Then For i = 0 To 12 If i <> 13 And cl.Offset(, i) = Empty Then MsgBox "Реестр средств измерений, не заполнена ячейка '" & .Cells(10, cl.Offset(, i).Column).Text & "' для " & cl & " !", vbCritical + vbOKOnly Cancel = True Exit Sub End If Next End If Next End With With Worksheets("Лист2") lRow = .Cells(.Rows.Count, 1).End(xlUp).Row For Each cl In .Range("C8327:C" & lRow).Cells If cl <> Empty And Not cl Like "*Резерв*" Then For i = 0 To 8 If i <> 8 And cl.Offset(, i) = Empty Then MsgBox "Журнал поверки,не заполнена ячейка '" & .Cells(10, cl.Offset(, i).Column).Text & "' для " & cl & " !", vbCritical + vbOKOnly .Cells(10, cl.Offset(, i).Column).Select Cancel = True End If Next End If Next End With With Worksheets("Лист3") lRow = .Cells(.Rows.Count, 1).End(xlUp).Row For Each cl In .Range("B12841:b" & lRow).Cells If cl <> Empty And Not cl Like "*Резерв*" Then For i = 0 To 8 If i <> 3 And cl.Offset(, i) = Empty Then MsgBox "Журнал эксплуатации, не заполнена ячейка '" & .Cells(10, cl.Offset(, i).Column).Text & "' для " & cl & " !", vbCritical + vbOKOnly .Cells(10, cl.Offset(, i).Column).Select Cancel = True Exit Sub End If Next End If Next End With
End Sub
[/vba]
Форумчане, всем доброго дня! Есть такой макрос, помогите прописать в него команду, чтоб он перед или после [vba]
[/vba] перекидывал на ячейку которую нужно заполнить. И второй момент, не могу понять почему макрос не отрабатывет первую часть макроса, начиная с "Лита2" работает нормально.SEA
SEA, Было бы не плохо увидеть ваш файл пример с данными (замените ваши данные не чувствительными данными). Чтот-то не охота всем будет делать файл для теста кода.
SEA, Было бы не плохо увидеть ваш файл пример с данными (замените ваши данные не чувствительными данными). Чтот-то не охота всем будет делать файл для теста кода.MikeVol
MikeVol, вложил файл. Если в А2 ввести любое значение и попытаться сохранить, то появится окно с у уведомлением что не заполонена ячейка в следующем столбце.
MikeVol, вложил файл. Если в А2 ввести любое значение и попытаться сохранить, то появится окно с у уведомлением что не заполонена ячейка в следующем столбце.SEA
MikeVol, Не удивительно, файл то не рабочий выложил, перезакрепил :D. Закрепил рабочий. Попробую еще раз более понятливо описать: Есть таблица с названием столбцов а, б, в, г....., если в А2 ввести любое значение и попробовать сохранить, то появляется сообщение что нужно заполнить ячейку в столбце, б, в, г.....Так вот, нужно чтобы не просто сообщение появлялось, а экран прокручивался и происходило выделение не заполненной ячейки. Не важно до или после сообщения.
MikeVol, Не удивительно, файл то не рабочий выложил, перезакрепил :D. Закрепил рабочий. Попробую еще раз более понятливо описать: Есть таблица с названием столбцов а, б, в, г....., если в А2 ввести любое значение и попробовать сохранить, то появляется сообщение что нужно заполнить ячейку в столбце, б, в, г.....Так вот, нужно чтобы не просто сообщение появлялось, а экран прокручивался и происходило выделение не заполненной ячейки. Не важно до или после сообщения.SEA
Сообщение отредактировал SEA - Понедельник, 26.05.2025, 15:46
cmivadwot, dfg: Огромное спасибо! Практически то что надо, даже значительно уменьшили мой макрос ;), но почему то, если заполнил допустим 70-ю строку, потом прокрутил лист до к примеру первой ячейки и сохраняешь, экран не фиксируется на незаполненной ячейке, а указывает на нее и возвращается на позицию на которой экран был перед сохранением, приходится скролить в ручную до указанной ячейки. И еще, можно чтоб в адресе Msg было написано название столбца из шапки таблицы, а не название столбцов Excel? Заранее благодарю
cmivadwot, dfg: Огромное спасибо! Практически то что надо, даже значительно уменьшили мой макрос ;), но почему то, если заполнил допустим 70-ю строку, потом прокрутил лист до к примеру первой ячейки и сохраняешь, экран не фиксируется на незаполненной ячейке, а указывает на нее и возвращается на позицию на которой экран был перед сохранением, приходится скролить в ручную до указанной ячейки. И еще, можно чтоб в адресе Msg было написано название столбца из шапки таблицы, а не название столбцов Excel? Заранее благодарю SEA
MikeVol, «Like» даже не обратил на нее внимание в своем коде, первоначально собирал его по сусекам, видимо строку эту и скопировал, но рабол и ладно :D. "Cells(10,"- номер строки в которой находится название таблицы.
MikeVol, «Like» даже не обратил на нее внимание в своем коде, первоначально собирал его по сусекам, видимо строку эту и скопировал, но рабол и ладно :D. "Cells(10,"- номер строки в которой находится название таблицы.SEA