Антон Кокин
В файле Стандартный.doc с образцом текста есть макрос AutoOpen, предлагающий сохранить файл с другим именем. Существует ли возможность автоматического программного удаления макроса при сохранении файла с другим именем? Версия - Word XP.
Вот конкретный макрос, который удалит ваш макрос AutoOpen из конкретного модуля Module1 конкретного проекта Normal (конкретность необходима, чтобы точно указать удаляемый макрос):
Sub removeModule()
'Удаление конкретного макроса при сохранении документа под другим именем
Dim aMdl As Variant
Dim aPrj As Variant
Dim lLin As Long
Dim lLin2Del As Long
Dim strSub2Del As String
Dim oDlg As Dialog
Set oDlg = Dialogs(wdDialogFileSaveAs)
On Error Resume Next
'Открываем окно "Сохранить как"
oDlg.Show
'Вводим имя макроса
strSub2Del = "AutoOpen"
'Присваиваем переменной имя конкретного проекта (в данном случае это проект "Normal")
Set aPrj = Application.VBE.VBProjects("Normal")
'Присваиваем переменной имя конкретного модуля, содержащего удаляемый макрос (например, "Module1")
Set aMdl = aPrj.VBComponents("Module1")
'Процедура удаления макроса из кода модуля
With aMdl.CodeModule
'метод ProcBodyLine возвращает первую строку конкретной процедуры как номер строки (число) _
(например, строка Sub может находиться на 3-й строке в модуле, значит возвращено будет 3)
iLin = .ProcBodyLine(strSub2Del, vbext_pk_Proc)
'метод ProcCountLines возвращает количество строк в конкретной процедуре
iLin2Del = .ProcCountLines(strSub2Del, vbext_pk_Proc)
'собственно удаление строк кода макроса
.DeleteLines iLin, iLin2Del - 1
End With
End Sub
Ссылки по теме