Страницы: 1
RSS
Запрет на сохранение файла при наличии пустых ячеек., как сохранить файл когда ячейки пусты но сохранить запрет
 
Доброго времени суток форумчане! Столкнулся с жесточайшим парадоксом ищу как выкрутиться!
У меня есть шаблон пустая таблица со строками и когда пользователь этот шаблон использует я хочу запретить сохранение пока он не заполнит столбец номер семь!
Вот макрос:
Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim i&
With Range("Таблица2").Parent.Range("G8:Таблица2")
   For i = .Row To .Row + .Rows.Count - 1
       If IsEmpty(.Parent.Cells(i, 7)) Then
           Cancel = True
           .Parent.Activate
           Cells(i, 7).Activate
           MsgBox "Заполните пустые ячейки основного обозначения или удалите лишние строки!!!", vbCritical
           Exit Sub
       End If
   Next
End With
End Sub

Но я не могу сохранить шаблон с макросом потому что строки пусты!!! как мне обойти это????
Может можно сделать макрос который активирует (создает)  макрос запрета только при открытии файла?
 
Отключить макросы, вставить код, сохранить.  :D
 
Доброго.
Я так понимаю, что слово "шаблон" тут используется не совсем по назначению, иными словами это не файл-шаблон с особым расширением, а некий файл-образец, на основании которого потом путем его копирования делают другие файлы.
Если я угадал, то один из вариантов, на мой взгляд, вводить еще условие на проверку перед сохранением.
Например, проверять при сохранении наличие 1 в А1 первого листа. Типа если там 1 есть, то проверку при сохранении не делать.
А потом еще на событие открытия повесить процедуру изничтожения этого значения из ячейки.
Таким образом, автор файла-образца знает, чтобы отключить проверку - надо ввести единицу в А1 первого листа, и можно сохранять образец.
А пользователь берет этот образец, открывает его (изничтожается проверочное значение), и дальше перед сохранением у него уже требуют проверку.


Ну, или пароль какой запрашивать для сохранения без проверки.

Надеюсь, понятно описал.
Изменено: Пытливый - 27.04.2022 13:56:08
Кому решение нужно - тот пример и рисует.
 
Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If ThisWorkbook.Names("CheckEmpty").RefersToRange.Value Then
        Dim i&
        With Range("Таблица2").Parent.Range("G8:Таблица2")
           For i = .Row To .Row + .Rows.Count - 1
               If IsEmpty(.Parent.Cells(i, 7)) Then
                   Cancel = True
                   .Parent.Activate
                   Cells(i, 7).Activate
                   MsgBox "Заполните пустые ячейки основного обозначения или удалите лишние строки!!!", vbCritical
                   Exit Sub
               End If
           Next
        End With
    End If
End Sub

Private Sub Workbook_Open()
    ThisWorkbook.Names("CheckEmpty").RefersToRange.Value = True
End Sub
 
Пытливый,  спасибо идея с очисткой при открытии вполне приемлема, но это реально шаблон, он запаролен и открывается только для чтения, заполняется и сохраняется куда нужно пользователю, а оригинал остается нетронутым!!!

МатросНаЗебре, не понял сути строки
Код
ThisWorkbook.Names("CheckEmpty").RefersToRange.Value

а у меня на нее ругается прошу небольшой комментарий что она означает.
 
Создаёте в шаблоне именованный диапазон CheckEmpty
Формулы - Присвоить имя

При открытии файла в эту ячейку будет проставляться ИСТИНА.
Макрос будет проверять пустые ячейки, только если в этой ячейке будет ИСТИНА.
В шаблоне будет тут пустая ячейка, соответственно, макрос не будет выполнять проверку, и будет сохраняться и при пустой таблице.
 
Семен Фадеев, "шаблон" это файл excel с расширением .xltx, .xltm
Если и у вас такой шаблон, то проверяйте расширение - если шаблонное - давать сохранять без проверки, если нешаблонное - фигу.
Изменено: Пытливый - 27.04.2022 15:12:52
Кому решение нужно - тот пример и рисует.
 
Пытливый, А понял Вас!!! Тогда конечно не шаблон!
МатросНаЗебре, Спасибо, тоже вполне удобно!!!
Благодарю Вас за помощь!!!!
Изменено: Семен Фадеев - 27.04.2022 15:47:26
Страницы: 1
Наверх