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

скомпилировал два макроса:
Третий пост отсюда: https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=82075&TITLE_SEO=82075-obyazatelnoe-zapolnenie-yacheek-pri-uslovii
и еще вариант с другого форума
Получилось следующее:
Код
[QUOTE][QUOTE]Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim cl As Range
    If IsEmpty(Range("F9")) Then
        MsgBox "Забыли заполнить ячейку F9!", vbCritical + vbOKOnly
    End If
    Cancel = True
End Sub
[/QUOTE][/QUOTE]


Все работает, но проблемка в том, что данный макет я сам не могу сохранить, не заполнив ячейку.
 
А если отключить события?
 
События отключаются в коде макроса или в настройках Excel?
 
По-другому надо: cначала поиск, вопросы - если ничего не накопали самостоятельно..
События в Excel
 
В окне Immediate выполните строку
Код
application.EnableEvents=false
 
Делаю так:


пытаюсь сохранить с незаполненной ячейкой, выдается ошибка (как и задумано):


Сохранить макет все равно не удается
 
Поместите курсор в окно Immediate и ВЫПОЛНИТЕ указанную строку - нажмите Enter. После этого сохраняйте.
 
Спасибо, таким образом успешно сохраняется. Но при запуске этого файла с другого компьютера, он также спокойно закрывается без заполнения ячейки.
Изменено: ussuritiger - 14.09.2020 11:53:10
 
Ну так после того, как отключили события и сохранили, следует СНОВА включить.
 
События включаются сами при старте Экселя.
 
Игорь, подозреваю, что Excel  уже был запущен )
 
простите мою недалекость, снова недопонимаю: если я включаю события, то при попытке сохранить данное изменение, файл ведь отказывается это сделать
 
Ну так я подсказал, на другой машине с другим Экселем проблем в этом быть не должно.
Но вот проверку я бы делал не по
Код
IsEmpty(Range("F9"))

а по
Код
Len(Trim(Range("F9"))) = 0

Потому что забить туда пробел у них нет проблем :(
И ещё нужно указать лист, вдруг там ещё листы добавятся.
Изменено: Hugo - 14.09.2020 12:16:22
 
и еще: на компьютере коллеги при запуске данного файла всплывает окошко с примерным текстом: "работа макросов отключена включить содержимое"
То есть, если сотрудник в целях предосторожности не нажмет клавишу "включить содержимое", то данный макрос окажется бесполезен и ячейка останется пустой?
 
Меня смущает, почему Cancel = True не внутри проверки?
 
Цитата
ussuritiger написал:
...то данный макрос окажется бесполезен и ячейка останется пустой?
Не только данный. Все макросы окажутся бесполезными. Нужно или в настройках Wxcel  разрешить макрпосы, или вынуждать пользователя включать их. Пример такого принуждения есть у Димы на сайте.
 
Цитата
Hugo написал:
1Len(Trim(Range("F9"))) = 0
переделал
Цитата
Юрий М написал:
Меня смущает, почему Cancel = True не внутри проверки?
переделал
все сохранилось, но коллеги с запущенными макросами по-прежнему спокойно закрывают файл, оставляя ячейку пустой. Прикрепляю текущий вариант.
Цитата
Юрий М написал:
Пример такого принуждения есть у Димы на сайте.
А кто такой Дима?
Изменено: ussuritiger - 14.09.2020 14:07:39
 
Про коллег: пусть они закроют ПРИЛОЖЕНИЕ, а потом откроют файл с разрешёнными макросами. Проверить, в каком состоянии находится отслеживание событий можно так: в окне Immediate выполнить строку
:
Код
?application.EnableEvents
Обратите внимание на знак вопроса в начале строки.
По поводу моего #15: переместите строку Cancel = True внутрь проверки (перед End If).
Про Диму: это Дмитрий Щербаков. Вот ссылка на статью.
 
Цитата
ussuritiger написал:
коллеги с запущенными макросами по-прежнему спокойно закрывают фай
А причём здесь ЗАКРЫТИЕ файла? Мы ведь говорим про СОХРАНЕНИЕ.
 
Ага. Коллеги могут закрывать файл, не вводя ничего в ячейку F9. Но, если они его каким-то образом изменяют и хотят записать, то выдается ошибка "не заполнена ячейка F9". Таким образом исходная проблема решена. Большое спасибо! Пойду посмотрю, как сделать обязательным включение макросов ))
Изменено: ussuritiger - 14.09.2020 14:48:57
Страницы: 1
Наверх