2015-08-19 3 views
1

Когда шаблон открыт, он запускает модуль Auto_open.Отключение модуля VBA после функции «Сохранить как»

Sub Auto_Open() 

SaveAsUserForm.Show 

End Sub 

Это приводит к появлению пользовательской формы, которая говорит, пожалуйста, сохраните как и кнопку команды Ok.

enter image description here

При нажатии Ok это работает этот код.

Private Sub SaveAs_Click() 

Dim bFileSaveAs As Boolean 
bFileSaveAs = Application.Dialogs(xlDialogSaveAs).Show 

If Not bFileSaveAs Then Unload Me 

If bFileSaveAs Then  
    Dim x As Object 
    Set x = Application.VBE.ActiveVBProject.VBComponents 
    x.Remove VBComponent:=x.Item("Auto_Open") 

    Unload Me 

End Sub 

Это удаляет модуль Auto_Open так сохранить как форма пользователя не всплывала в новом файле, который был только сохранен. Но я хочу, чтобы он был отключен только в том случае, если используется функция save as (как с помощью автоматического открытия модуля, так и на вкладке файла

Мне также нужно, чтобы пользователь отменил его, и он полностью отключит функцию сохранения. сохранить как. Но если используется функция сохранения, она запрашивает пароль, поэтому я могу отредактировать шаблон.

Так что в основном, когда пользователь открывает шаблон, он не может ничего изменить или изменить что-либо, если только он не сэкономит сначала, затем после его сохранения Как и имя файла изменяется, он отключит модуль Auto_Open, поэтому он не запрашивает сохранение при каждом открытии нового файла.

+0

Вы считали проверку имени файла и пути и только показ сообщения, если это «огиальный» путь? Или, если вы пометите шаблон как «только для чтения», тогда ваши пользователи всегда будут «сохранять как» ... –

+0

Отметить его как просить, чтобы они включали макросы. Просто нужно заявление, в котором говорится: «Если файл сохранен As Then remove макрос auto_open' и 'если функция сохранения используется. Затем запросите пароль. – Duraholiday

+0

. Код здесь можно использовать: http://www.mrexcel.com/forum/excel-questions/535724-how-open-save-dialog- box-visual-basic-applications.html –

ответ

1

Вы можете изменить код во время выполнения. Вы можете использовать ReplaceLine способ заменить строку, призывающую SaveAsUserForm.Show с комментарием:

Dim mdl As CodeModule 
Set mdl = x.Item("Auto_Open") 
mdl.ReplaceLine(3, "'SaveAsUserForm.Show") 

Оговорка: Если номер строки, чтобы заменить когда-либо изменения, этот код будет перезаписывать новую строку. Я предлагаю найти номер строки рассматриваемого текста, а затем использовать ReplaceLine с номером этой строки.

(Это должно быть простым, но это не так. По-видимому, вы должны получить count of lines in the module, прочитать все lines in the module, передавая при подсчете строк, разбивайте текст построчно, и найдите строку с согласованием текст.)

+0

Мне нечего заменить модуль Auto_Open, и его единственным заданием является запрос пользовательской формы. Я искал использование 'before save', но попытался бы удалить Auto_Open каждый раз, когда кто-то сохранил новый файл, и он выйдет из строя, потому что он уже удалил его при первом сохранении. Это действительно работало для другого проекта excel, поэтому спасибо за это! – Duraholiday

+0

@Duraholiday Я не хочу заменить весь модуль, просто закомментируйте строку, которая вызывает 'SaveAsUserForm.Show'. –