Страницы: 1
RSS
Запрет сохранения книги до выполнения условия "заполнить последнюю ячейку, если заполнена соседняя ячейка", Запрет сохранения книги макросом
 
Здравствуйте,

Столкнулся с такой задачей. Можно ли создать макрос, чтобы книга не закрывалась до выполнения условия "заполнить последнюю ячейку, если заполнена соседняя ячейка". Допустим на "Листе 1" Строка "А6" заполнена. Надо чтобы строка "B6" тоже была заполнена и только после этого можно было закрыть книгу. И так далее...

П.С. Я нашёл что то подобное https://excelpedia.ru/makrosi-v-excel/ne-daem-zakrit-knigu, но тут говорится об определённом ячейке.
Изменено: Шахин - 17.01.2020 11:26:53
По почерку принтера можно судить о том, как нервничает компьютер
 
Шахин,
попробуйте так
Скрытый текст
Не бойтесь совершенства. Вам его не достичь.
 
Mershik, Работает :idea: , только вот когда книга закрывается, остаётся значок excel активным.
Изменено: Шахин - 17.01.2020 12:44:09
По почерку принтера можно судить о том, как нервничает компьютер
 
Шахин, ну я не в курсе я просто переделал макрос предложенный по ссылке, может кто то помжет этот косяк исправить
Не бойтесь совершенства. Вам его не достичь.
 
Mershik, Спасибо большое и на этом! ) :D  :idea:  Респект!
По почерку принтера можно судить о том, как нервничает компьютер
 
Подправил макрос уважаемого Mershik. Добавил функцию закрытия приложения если открыта одна книга. Добавил проверку если В заполнен, а А не заполнен. Не совсем понял зачем сохранять книгу ну да ладно.
Код
Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim i&, lLastRow&
Dim K1$, K2$
'Шаг 1: Проверяем пустая ли ячейка C7
i = 4
With Worksheets("Лист 1")
    lLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    K1 = .Range("A" & i & ":A" & lLastRow).Address
    K1 = Application.WorksheetFunction.CountIf(Range(K1), "<>" & "")
    lLastRow = .Cells(.Rows.Count, 2).End(xlUp).Row
    K2 = .Range("B" & i & ":B" & lLastRow).Address
    K2 = Application.WorksheetFunction.CountIf(Range(K2), "<>" & "")
End With
'Шаг 2: Если пустая, отменить закрытие книги
If K1 <> K2 Then
    Cancel = True
    MsgBox "При заполненных ячейках в столбца А не может быть пустым значение в столбце В"
    Exit Sub
    'Шаг 3: Если не пустая, сохранить и закрыть
Else
    If Workbooks.Count = 1 Then
        ThisWorkbook.Save
        Application.Quit
    Else
        ThisWorkbook.Save
    End If
End If
End Sub

И ещё один вопрос Mershik: А Вы пробовали через F8 прогнать код? Excel может и загрустить.  :cry:  У меня не раз бывало, что вылетало при таком закрытии.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Alemox, вечер добрый, да я только учусь, да я только через f8 все прогоняю иначе не умею пока что   8) , а что то не так получилось в моем варианте ?
Изменено: Mershik - 17.01.2020 22:50:38
Не бойтесь совершенства. Вам его не достичь.
 
Всё так. Просто процедура на закрытие несколько раз проходит. Может зациклиться в некоторых случаях.  :D
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Здравствуйте уважаемые гуру, по теме запрета закрытия файла, макрос ругается когда вместо значения в ячейке есть формула впр, и если есть найденное значение согласно впр , то, сотрудник должен заполнить данные в соседнем столбце, а если значение не найдено, и, соответственно заполнять в соседней ячейке ничего не надо  - чтобы позволял макрос закрыть файл. Вот формула подстановки данных ЕСЛИОШИБКА(ВПР(C4;'TDSheet (3)'!$A$2:$J$5414;10;0);"нет данных"), прикрепляю скрин и файл, спасибо за помощь.
Изменено: Александр Кацага - 14.04.2022 12:42:40
 
Скрытый текст

Добрый день, подскажите пожалуйста как подкорректировать код VBA, макрос ругается и не даёт закрыть файл. Ячейка пустая в ней формула поиска , значения нет, код VBA видит формулу как значение. Как сделать так чтобы файл закрывался в случае если значение не найдено через еошибка/впр, и в ячейке только формула?
Спасибо за ответы.
Страницы: 1
Наверх