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
А можно ли программно удалять модуль
Авторы создают документ из шаблона, в котором сидит модуль, который они используют для стилевой разметки абзацев. Но мне он уже не нужен и только мешает, когда я хочу открыть код VBA. Потому что первым обязательно открывает этот самый ненужный модуль (т.е. тратится время на его закрытие и переключение в нужное место). Вот можно ли прописать его удаление, например, в процедурку "Auto Open"?
Код:
Если подключить к проекту библиотеку Microsoft Visual Basic for Applications Extensibility [color=red]x.x[/color] (x.x - номер версии), то первую строку примера можно написать так:
Код:
Dim objVBCs As VBComponents, objItem VBComponent
При этом станет доступна подсказка мастера завершения кода для объектов указанных типов.
А как бы теперь так сделать, чтобы удалялся модуль NewMacros не из Проекта Normal.dot, а из Проекта открытого документа? А удаляется из Normal.dot, а то как раз "самый рабочий" модуль. :-)
Цитата: 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
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
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