Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Внесение изменений в проект VBA макросом - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Внесение изменений в проект VBA макросом (Макросы/Sub)
Внесение изменений в проект VBA макросом
light26 Дата: Понедельник, 15.05.2017, 15:49 | Сообщение № 1
Группа: Друзья
Ранг: Старожил
Сообщений: 1267
Репутация: 81 ±
Замечаний: 0% ±

2007, 2010, 2013
Всем доброго времени суток.
Написал в 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 - Понедельник, 15.05.2017, 16:32
 
Ответить
СообщениеВсем доброго времени суток.
Написал в 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
Дата добавления - 15.05.2017 в 15:49
Manyasha Дата: Понедельник, 15.05.2017, 16:04 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 1832
Репутация: 766 ±
Замечаний: 0% ±

Excel 2007, 2010
Вадим, привет, без доступа будет ругаться.
Можно придумать какой-нибудь признак заполненности заявки. Например, где-нибудь на листе единичку поставить или проверить, заполнена ли строчка в заявке.


marinamorozova_box@mail.ru
ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеВадим, привет, без доступа будет ругаться.
Можно придумать какой-нибудь признак заполненности заявки. Например, где-нибудь на листе единичку поставить или проверить, заполнена ли строчка в заявке.

Автор - Manyasha
Дата добавления - 15.05.2017 в 16:04
light26 Дата: Понедельник, 15.05.2017, 16:12 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1267
Репутация: 81 ±
Замечаний: 0% ±

2007, 2010, 2013
Привет, Мариш
Можно придумать какой-нибудь признак заполненности заявки. Например, где-нибудь на листе единичку поставить или проверить, заполнена ли строчка в заявке.
Заполненность заявки - не сама цель. После заполнения заявки файл возвращается мне, я его открываю и вижу не заполненную заявку, а предложение выбрать ту или иную заявку для заполнения... Похоже файл надо приложить. В этом файле нет кода для удаления модуля
К сообщению приложен файл: 5177408.xlsm(39Kb)


Я не волшебник. Я только учусь

Сообщение отредактировал light26 - Понедельник, 15.05.2017, 16:31
 
Ответить
СообщениеПривет, Мариш
Можно придумать какой-нибудь признак заполненности заявки. Например, где-нибудь на листе единичку поставить или проверить, заполнена ли строчка в заявке.
Заполненность заявки - не сама цель. После заполнения заявки файл возвращается мне, я его открываю и вижу не заполненную заявку, а предложение выбрать ту или иную заявку для заполнения... Похоже файл надо приложить. В этом файле нет кода для удаления модуля

Автор - light26
Дата добавления - 15.05.2017 в 16:12
light26 Дата: Понедельник, 15.05.2017, 16:46 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1267
Репутация: 81 ±
Замечаний: 0% ±

2007, 2010, 2013
Хм, немного я ступил с Private Sub Workbook_BeforeClose(Cancel As Boolean)


Я не волшебник. Я только учусь
 
Ответить
СообщениеХм, немного я ступил с Private Sub Workbook_BeforeClose(Cancel As Boolean)

Автор - light26
Дата добавления - 15.05.2017 в 16:46
RAN Дата: Понедельник, 15.05.2017, 17:20 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4419
Репутация: 872 ±
Замечаний: 0% ±

2010
[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
[/vba]
Хм, немного я ступил с Private Sub Workbook_BeforeClose(Cancel As Boolean)

Почему немного? :)
Какой смысл отключать Workbook_Open, если все то-же самое ты проделываешь при сохранении?


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Понедельник, 15.05.2017, 18:18
 
Ответить
Сообщение[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
[/vba]
Хм, немного я ступил с Private Sub Workbook_BeforeClose(Cancel As Boolean)

Почему немного? :)
Какой смысл отключать Workbook_Open, если все то-же самое ты проделываешь при сохранении?

Автор - RAN
Дата добавления - 15.05.2017 в 17:20
light26 Дата: Понедельник, 15.05.2017, 17:39 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1267
Репутация: 81 ±
Замечаний: 0% ±

2007, 2010, 2013
Почему немного?
Ладно, ладно, много :)
Исправился так[vba]
Код
Private Sub CommandButton1_Click()
ActiveWorkbook.Unprotect
    Sheets("Заявка НИР, КСР").Visible = True
    Sheets("Заявка НИР, КСР").Select
     Sheets("Выбор заявки").Visible = False
      ActiveWorkbook.VBProject.VBComponents("Module1").Collection.Remove ActiveWorkbook.VBProject.VBComponents("Module1")
     ActiveWorkbook.Protect Structure:=True, Windows:=False
End Sub

Private Sub CommandButton2_Click()
ActiveWorkbook.Unprotect
    Sheets("Заявка").Visible = True
    Sheets("Заявка").Select
     Sheets("Выбор заявки").Visible = False
      ActiveWorkbook.VBProject.VBComponents("Module1").Collection.Remove ActiveWorkbook.VBProject.VBComponents("Module1")
     ActiveWorkbook.Protect Structure:=True, Windows:=False
End Sub
[/vba]Но без галочки «Доверять доступ к объектной модели проектов VBA» не работает :(


Я не волшебник. Я только учусь
 
Ответить
Сообщение
Почему немного?
Ладно, ладно, много :)
Исправился так[vba]
Код
Private Sub CommandButton1_Click()
ActiveWorkbook.Unprotect
    Sheets("Заявка НИР, КСР").Visible = True
    Sheets("Заявка НИР, КСР").Select
     Sheets("Выбор заявки").Visible = False
      ActiveWorkbook.VBProject.VBComponents("Module1").Collection.Remove ActiveWorkbook.VBProject.VBComponents("Module1")
     ActiveWorkbook.Protect Structure:=True, Windows:=False
End Sub

Private Sub CommandButton2_Click()
ActiveWorkbook.Unprotect
    Sheets("Заявка").Visible = True
    Sheets("Заявка").Select
     Sheets("Выбор заявки").Visible = False
      ActiveWorkbook.VBProject.VBComponents("Module1").Collection.Remove ActiveWorkbook.VBProject.VBComponents("Module1")
     ActiveWorkbook.Protect Structure:=True, Windows:=False
End Sub
[/vba]Но без галочки «Доверять доступ к объектной модели проектов VBA» не работает :(

Автор - light26
Дата добавления - 15.05.2017 в 17:39
RAN Дата: Понедельник, 15.05.2017, 18:21 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4419
Репутация: 872 ±
Замечаний: 0% ±

2010
Далось тебе это удаление кода.
Код выше поправил.
К сообщению приложен файл: 5177408-1.xlsm(41Kb)


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеДалось тебе это удаление кода.
Код выше поправил.

Автор - RAN
Дата добавления - 15.05.2017 в 18:21
light26 Дата: Понедельник, 15.05.2017, 18:45 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1267
Репутация: 81 ±
Замечаний: 0% ±

2007, 2010, 2013
Но! Если у пользователя не стоит галочка напротив «Доверять доступ к объектной модели проектов VBA», будет ли у него удаляться Module1?

Код выше поправил.
Спасибо, буду пользовать[vba]
Код
CustomProperties
[/vba]убрал


Я не волшебник. Я только учусь

Сообщение отредактировал light26 - Понедельник, 15.05.2017, 18:52
 
Ответить
Сообщение
Но! Если у пользователя не стоит галочка напротив «Доверять доступ к объектной модели проектов VBA», будет ли у него удаляться Module1?

Код выше поправил.
Спасибо, буду пользовать[vba]
Код
CustomProperties
[/vba]убрал

Автор - light26
Дата добавления - 15.05.2017 в 18:45
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Внесение изменений в проект VBA макросом (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!