Всем доброго времени суток. Написал в Module1 макрос:[vba]
Код
Private Sub Workbook_Open() Application.ScreenUpdating = False ActiveWorkbook.Unprotect Sheets("Выбор заявки").Visible = True Sheets("Заявка").Visible = False Sheets("Заявка НИР, КСР").Visible = False Sheets("Приветствие").Visible = False Application.ScreenUpdating = True ActiveWorkbook.Protect Structure:=True, Windows:=False End Sub
[/vba], который при открытии книги дает пользователю выбрать какую форму заявки он будет заполнять, после чего все листы скрываются кроме листа с выбранной заявкой, которая заполняется и файл сохраняется. Но при открытии этого файла опять появится диалоговое окно с выбором формы заявки. Решил макросом удалить модуль с кодом, описанным выше. Подключил библиотеку Microsoft Visual Basic For Applications Extensibility, поставил галочку «Доверять доступ к объектной модели проектов VBA» и добавил:[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) ActiveWorkbook.Unprotect ActiveWorkbook.VBProject.VBComponents("Module1").Collection.Remove ActiveWorkbook.VBProject.VBComponents("Module1") ActiveWorkbook.Protect Structure:=True, Windows:=False End Sub
[/vba]Но! Если у пользователя не стоит галочка напротив «Доверять доступ к объектной модели проектов VBA», будет ли у него удаляться Module1?
Всем доброго времени суток. Написал в Module1 макрос:[vba]
Код
Private Sub Workbook_Open() Application.ScreenUpdating = False ActiveWorkbook.Unprotect Sheets("Выбор заявки").Visible = True Sheets("Заявка").Visible = False Sheets("Заявка НИР, КСР").Visible = False Sheets("Приветствие").Visible = False Application.ScreenUpdating = True ActiveWorkbook.Protect Structure:=True, Windows:=False End Sub
[/vba], который при открытии книги дает пользователю выбрать какую форму заявки он будет заполнять, после чего все листы скрываются кроме листа с выбранной заявкой, которая заполняется и файл сохраняется. Но при открытии этого файла опять появится диалоговое окно с выбором формы заявки. Решил макросом удалить модуль с кодом, описанным выше. Подключил библиотеку Microsoft Visual Basic For Applications Extensibility, поставил галочку «Доверять доступ к объектной модели проектов VBA» и добавил:[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) ActiveWorkbook.Unprotect ActiveWorkbook.VBProject.VBComponents("Module1").Collection.Remove ActiveWorkbook.VBProject.VBComponents("Module1") ActiveWorkbook.Protect Structure:=True, Windows:=False End Sub
[/vba]Но! Если у пользователя не стоит галочка напротив «Доверять доступ к объектной модели проектов VBA», будет ли у него удаляться Module1?light26
Я не волшебник. Я только учусь
Сообщение отредактировал light26 - Понедельник, 15.05.2017, 16:32
Вадим, привет, без доступа будет ругаться. Можно придумать какой-нибудь признак заполненности заявки. Например, где-нибудь на листе единичку поставить или проверить, заполнена ли строчка в заявке.
Вадим, привет, без доступа будет ругаться. Можно придумать какой-нибудь признак заполненности заявки. Например, где-нибудь на листе единичку поставить или проверить, заполнена ли строчка в заявке.Manyasha
Можно придумать какой-нибудь признак заполненности заявки. Например, где-нибудь на листе единичку поставить или проверить, заполнена ли строчка в заявке.
Заполненность заявки - не сама цель. После заполнения заявки файл возвращается мне, я его открываю и вижу не заполненную заявку, а предложение выбрать ту или иную заявку для заполнения... Похоже файл надо приложить. В этом файле нет кода для удаления модуля
Можно придумать какой-нибудь признак заполненности заявки. Например, где-нибудь на листе единичку поставить или проверить, заполнена ли строчка в заявке.
Заполненность заявки - не сама цель. После заполнения заявки файл возвращается мне, я его открываю и вижу не заполненную заявку, а предложение выбрать ту или иную заявку для заполнения... Похоже файл надо приложить. В этом файле нет кода для удаления модуляlight26
Private Sub CommandButton1_Click() ActiveWorkbook.Unprotect Sheets("Заявка НИР, КСР").Visible = True Sheets("Выбор заявки").Visible = False ActiveWorkbook.Protect Structure:=True, Windows:=False On Error Resume Next With ActiveWorkbook.CustomDocumentProperties .Add Name:="MyCustom", _ LinkToContent:=False, _ Type:=msoPropertyTypeNumber, _ Value:=1 End With End Sub
[/vba] [vba]
Код
Private Sub Workbook_Open() On Error Resume Next If ActiveWorkbook.CustomDocumentProperties("MyCustom") Then If Err Then Application.ScreenUpdating = False ActiveWorkbook.Unprotect Sheets("Выбор заявки").Visible = True Sheets("Заявка").Visible = False Sheets("Заявка НИР, КСР").Visible = False Sheets("Приветствие").Visible = False Application.ScreenUpdating = True ActiveWorkbook.Protect Structure:=True, Windows:=False End If End If End Sub
Хм, немного я ступил с Private Sub Workbook_BeforeClose(Cancel As Boolean)
Почему немного? Какой смысл отключать Workbook_Open, если все то-же самое ты проделываешь при сохранении?
[vba]
Код
Private Sub CommandButton1_Click() ActiveWorkbook.Unprotect Sheets("Заявка НИР, КСР").Visible = True Sheets("Выбор заявки").Visible = False ActiveWorkbook.Protect Structure:=True, Windows:=False On Error Resume Next With ActiveWorkbook.CustomDocumentProperties .Add Name:="MyCustom", _ LinkToContent:=False, _ Type:=msoPropertyTypeNumber, _ Value:=1 End With End Sub
[/vba] [vba]
Код
Private Sub Workbook_Open() On Error Resume Next If ActiveWorkbook.CustomDocumentProperties("MyCustom") Then If Err Then Application.ScreenUpdating = False ActiveWorkbook.Unprotect Sheets("Выбор заявки").Visible = True Sheets("Заявка").Visible = False Sheets("Заявка НИР, КСР").Visible = False Sheets("Приветствие").Visible = False Application.ScreenUpdating = True ActiveWorkbook.Protect Structure:=True, Windows:=False End If End If End Sub