Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

А можно ли программно удалять модуль

248
26 октября 2007 года
Dmitry2064
590 / / 06.12.2006
Авторы создают документ из шаблона, в котором сидит модуль, который они используют для стилевой разметки абзацев. Но мне он уже не нужен и только мешает, когда я хочу открыть код VBA. Потому что первым обязательно открывает этот самый ненужный модуль (т.е. тратится время на его закрытие и переключение в нужное место). Вот можно ли прописать его удаление, например, в процедурку "Auto Open"?
405
29 октября 2007 года
Dmitrii
554 / / 16.12.2004
Попробуйте что-нибудь такое:
 
Код:
Dim objVBCs As Object, objItem As Object
Set objVBCs = Application.VBE.VBProjects(1).VBComponents
Set objItem = Application.VBE.VBProjects(1).VBComponents("Module1")
MsgBox objVBCs.Count
objVBCs.Remove objItem
MsgBox objVBCs.Count
Set objItem = Nothing
Set objVBCs = Nothing

Если подключить к проекту библиотеку Microsoft Visual Basic for Applications Extensibility [color=red]x.x[/color] (x.x - номер версии), то первую строку примера можно написать так:
 
Код:
Dim objVBCs As VBComponents, objItem VBComponent

При этом станет доступна подсказка мастера завершения кода для объектов указанных типов.
248
30 октября 2007 года
Dmitry2064
590 / / 06.12.2006
А как бы теперь так сделать, чтобы удалялся модуль NewMacros не из Проекта Normal.dot, а из Проекта открытого документа? А удаляется из Normal.dot, а то как раз "самый рабочий" модуль. :-)
405
31 октября 2007 года
Dmitrii
554 / / 16.12.2004
Цитата: Dmitry2064
А как бы теперь так сделать, чтобы удалялся модуль NewMacros не из Проекта Normal.dot, а из Проекта открытого документа? А удаляется из Normal.dot, а то как раз "самый рабочий" модуль. :-)


В качестве параметра для свойства VBProjects укажите либо порядковый номер, либо имя нужного проекта. Например:

Код:
Sub Example()
Dim objItem As VBComponent
On Error GoTo ErrCase
Set objItem = Application.VBE.VBProjects("Project").VBComponents("NewMacros")
Application.VBE.VBProjects("Project").VBComponents.Remove objItem
MsgBox "Указанный компонент удалён.", vbInformation
Set objItem = Nothing
Exit Sub

ErrCase:
    MsgBox "Указанный проект или его компонент не найден.", vbCritical
    Set objItem = Nothing
    Err.Clear
End Sub

Если номер или имя проекта заранее неизвестны, то можно придумать что-нибудь такое:
Код:
Sub Example_2()
Dim objPrj As VBProject
Dim objItem As VBComponent
Dim strTemp As String
For Each objPrj In Application.VBE.VBProjects
    strTemp = objPrj.Name
    If StrComp(strTemp, "Normal", vbTextCompare) <> 0 Then Exit For
Next objPrj
On Error GoTo ErrCase
Set objItem = Application.VBE.VBProjects(strTemp).VBComponents("NewMacros")
Application.VBE.VBProjects(strTemp).VBComponents.Remove objItem
MsgBox "Указанный компонент удалён.", vbInformation
Set objItem = Nothing
Exit Sub

ErrCase:
    MsgBox "Указанный компонент проекта не найден.", vbCritical
    Set objItem = Nothing
    Err.Clear
End Sub
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог