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

Суть: если столбец B=1 и столбец F – непустой, то столбец G не может быть равен 0 либо пустым.

Иначе при Worksheet_Deactivate выскакивает MsgBox "СТОП! Количество не может быть нулевым!"
И макрос возвращает курсор в ячейку столбца G, где 0 либо пусто.

Спасибо заранее!
Изменено: Sanja - 12.08.2026 05:59:28
 
Здравствуйте.
Не понятно что вы хотите.
Цитата
написал:
если столбец B=1 и столбец F – непустой, то столбец G не может быть равен 0 либо пустым.
Так заполните его, или вы хотите чтобы это делал макрос? Или вы хотите чтобы макрос пропускал такое сочетание и не выдавал сообщение? Но в файле  нет макроса, а возможно просто я его не нашел.
 
Цитата
написал:
Не понятно что вы хотите.
На примере любой строчки:
ЕСЛИ B15=1
И F15 – непустая, то
при значении G15=0 или пустой

макрос при попытки деактивации листа выдаёт MsgBox "СТОП! Количество не может быть нулевым!" и возвращает после нажатия OK курсор в ячейку G15 (чтобы там юзер ввел какое-либо положительное число).

И так либо по всем строчкам листа, либо (если это - плохая идея), по диапазону строк 15:1088.
 
В ячейках столбца 'G15:G+.' стоят формулы, зависящие от ячеек 'E5:E7', которые, в свою очередь, зависят от ячеек 'G4:G7' куда данные вводятся вручную(?).
Может стоит их проверять ('G4:G7') перед деактивацией листа, а не ячейки с формулами?
Или диапазон 'Z4:AG5'?
Короче те ячейки, которые зависят от исходных данных, а не от формул. Их гораздо меньше.
В модуль листа
Код
Private Sub Worksheet_Deactivate()
Dim ctrlRange As Range
Dim iCl As Range
On Error Resume Next
Set ctrlRange = Me.Range("Z4:AG4")  'проверяемый диапазон
For Each iCl In ctrlRange
  If iCl > 0 Then Exit Sub
Next
MsgBox "СТОП! Количество не может быть нулевым!"
Me.Activate
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Цитата
написал:
В ячейках столбца 'G15:G+.' стоят формулы, зависящие от ячеек 'E5:E7', которые, в свою очередь, зависят от ячеек 'G4:G7' куда данные вводятся вручную
В ячейках G иногда стоят формулы, зависящие от ячеек 'E5:E7', которые, в свою очередь, зависят от ячеек 'G4:G7' куда данные вводятся вручную.
Всё верно, уважаемый.

Цитата
Может стоит их проверять ('G4:G7') перед деактивацией листа, а не ячейки с формулами?
Нет, смысл предельно прост: если добавляешь в смету позицию ("1" в столбце B), количество по строчке не может быть пустым / равным 0.
 
Цитата
написал:
Set ctrlRange = Me.Range("Z4:AG4")  'проверяемый диапазон
Получается, что нужно указать проверяемый диапазон "G15:G1088"?
 
Код
'Проверка нулевых значений по смете
Private Sub Worksheet_Deactivate()
Dim ctrlRange As Range
Dim iCl As Range
On Error Resume Next
Set ctrlRange = Me.Range("G15:G1088")  'Проверяемый диапазон
For Each iCl In ctrlRange
  If iCl > 0 Then Exit Sub
Next
MsgBox "СТОП! Количество не может быть нулевым!"
Me.Activate
End Sub

Так не работает. Ничего не происходит.
Нужна отсылка к столбцам B и G  :(  
 
Ну Вам виднее. Уважаемый
Скрытый текст
Согласие есть продукт при полном непротивлении сторон
 
Цитата
написал:
Ну Вам виднее. Уважаемый
Спасибо! Великолепно!
Изменено: Antag - 18.08.2026 14:59:33
Страницы: 1
Читают тему
Наверх