Возможны ли действия над макросом с пом.VBA

Программирование на Visual Basic for Applications
Владимир7
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 13.03.2008 (Чт) 22:12

Возможны ли действия над макросом с пом.VBA

Сообщение Владимир7 » 05.01.2009 (Пн) 23:26

Возможны ли действия над макросом с помощью VBA например редактирование, переименование или хотя бы удаление?

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Re: Возможны ли действия над макросом с пом.VBA

Сообщение dr.MIG » 05.01.2009 (Пн) 23:54

Добавлять можно, на форуме уже был этот пример:
Код: Выделить всё
obj.VBProject.VBComponents(1).CodeModule.AddFromString "Sub Макрос1" & vbCrLf & "MsgBox ""Hello!""" & vbCrLf & "End Sub" 'где obj -- это Workbook или ActiveDocument


Однако будет сообщение об ошибке.

Кроме того у CodeModule есть метод DeleteLines. Судя по названию он делает то, что требуется.
Salus populi suprema lex

Владимир7
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 13.03.2008 (Чт) 22:12

Re: Возможны ли действия над макросом с пом.VBA

Сообщение Владимир7 » 06.01.2009 (Вт) 1:46

Создать макрос VBA тем же самым VBA получилось с Вашей помощью (сообщения об ошибке не было) - спасибо!
А вот удалить макрос кодом VBA - не идет.
Нашел на форуме упоминаемый Вами пример, может не тот конечно, всё равно - не движется.
Привожу свои попытки решения вопроса:
'ActiveWorkbook.VBProject.CodeModule("Module1").DeleteLines "УдалямыйМакрос"
'ActiveWorkbook.VBProject.CodeModule("Module1").DeleteLines startline:=2, Count:=3
ActiveWorkbook.VBProject.CodeModule("Module1").DeleteLines 1

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: Возможны ли действия над макросом с пом.VBA

Сообщение Alec » 06.01.2009 (Вт) 13:11

CodeModule - это не коллекция, вместо CodeModule("Module1") нужно писать VBComponents("Module1").CodeModule.
Для удаления определенного макроса (или процедуры) нужно удалять строки, его содержащие. Эти строки находятся так:
Код: Выделить всё
' начало процедуры
ProcStart = ActiveWorkbook.VBProject.VBComponents("Module1").CodeModule.ProcStartLine "УдалямыйМакрос", vbext_pk_Proc
'количество строк
ProcCount = ActiveWorkbook.VBProject.VBComponents("Module1").CodeModule.ProcCountLines "УдалямыйМакрос", vbext_pk_Proc
'удаляем
ActiveWorkbook.VBProject.VBComponents("Module1").CodeModule.DeleteLines ProcStart, ProcCount

соответственно можно и так
Код: Выделить всё
ProcName = "УдалямыйМакрос"
With ActiveWorkbook.VBProject.VBComponents("Module1").CodeModule
    .DeleteLines .ProcStartLine (ProcName, vbext_pk_Proc),.ProcCountLines (ProcName, vbext_pk_Proc)
End With

Переименование модуля:
Код: Выделить всё
ActiveWorkbook.VBProject.VBComponents("Module1").Name="MySuperModule"

Удаление модуля:
Код: Выделить всё
ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.VBComponents("Module1")

dr.MIG писал(а):Однако будет сообщение об ошибке.

Владимир7 писал(а):сообщения об ошибке не было

Сообщение об ошибке возникает, когда отключено "Доверять доступ к Visual Basic Project" (Меню [Сервис] - [Макрос>] - [Безопасность...], закладка "Надежные источники") (эта возможность появилась начиная с Office XP с целью защиты от распространения макровирусов). Возможно у тебя там галочка стоит, или офис старше. Ну в любом случае нужно иметь в ввиду, что по умолчанию доверия нет, поэтому на других компьютерах твой проект скорее всего не заработает без настройки.
Иногда лучше вовремя остановиться...
И начать заново!

Владимир7
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 13.03.2008 (Чт) 22:12

Re: Возможны ли действия над макросом с пом.VBA

Сообщение Владимир7 » 07.01.2009 (Ср) 14:27

Большое спасибо за разъяснение! Сайт вообще супер! Вопрос не остался без ответа.
И скорее всего надо последавать приведенной цитате
"Лучше вовремя остановиться...
И начать заново!"
Открываю заново В.Г.Кузменко "Программирование на VBA"

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: Возможны ли действия над макросом с пом.VBA

Сообщение viter.alex » 11.01.2009 (Вс) 22:05

dr.MIG писал(а):Добавлять можно, на форуме уже был этот пример:
Код: Выделить всё
obj.VBProject.VBComponents(1).CodeModule.AddFromString "Sub Макрос1" & vbCrLf & "MsgBox ""Hello!""" & vbCrLf & "End Sub" 'где obj -- это Workbook или ActiveDocument


Однако будет сообщение об ошибке.

Кроме того у CodeModule есть метод DeleteLines. Судя по названию он делает то, что требуется.

В пошаговом режиме это вызывает предупреждение, но работу продолжает.
Лучше день потерять — потом за пять минут долететь!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27

    TopList