Программное редактирование кода

Программирование на Visual Basic for Applications
litvin22
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 01.06.2007 (Пт) 17:30
Откуда: Ставрополь

Программное редактирование кода

Сообщение litvin22 » 09.06.2007 (Сб) 11:21

Возможно ли программное редактирование кода?
Ведь, по логике вещей, программный модуль является частью (объектом) активного документа, а содержащийся в нем текст кода - значением свойства. Если это так, то должна существовать возможность доступа к нему из другого модуля для редактирования.
То есть запускаем на выполнение модуль-редактор, изменяем с его помощью модуль-цель и последний начинает работать по-другому.
Это реально? А если да, то каким образом?
Ну или то же самое, из другого документа, но в пределах одного приложения.

P.S. для GSerg: я пользовался поиском, но ничего подобного не нашел.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 09.06.2007 (Сб) 11:28

Тем не менее, в поиске это есть.
Но следует учитывать, что по умолчанию это запрещено. Для разрешения нужно включить параметр "Доверять проектам VBA", что является большой дырой в безопасности.
Lasciate ogni speranza, voi ch'entrate.

Gloom
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 200
Зарегистрирован: 23.11.2004 (Вт) 15:57
Откуда: СПб

Re: Программное редактирование кода

Сообщение Gloom » 09.06.2007 (Сб) 11:37

litvin22 писал(а):Возможно ли программное редактирование кода?
Ведь, по логике вещей, программный модуль является частью (объектом) активного документа, а содержащийся в нем текст кода - значением свойства. Если это так, то должна существовать возможность доступа к нему из другого модуля для редактирования.
То есть запускаем на выполнение модуль-редактор, изменяем с его помощью модуль-цель и последний начинает работать по-другому.
Это реально? А если да, то каким образом?
Ну или то же самое, из другого документа, но в пределах одного приложения.

P.S. для GSerg: я пользовался поиском, но ничего подобного не нашел.

В MSO это делается через объектную модель VBE

litvin22
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 01.06.2007 (Пт) 17:30
Откуда: Ставрополь

Сообщение litvin22 » 09.06.2007 (Сб) 12:05

Ну, делается. На Луну тоже летают.
Вопрос как, хотя бы в общих чертах.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 09.06.2007 (Сб) 12:21

Для начала подключи в референсах библиотеку Microsoft Visual Basic 6.0 Extensibility.
Затем посмотри в Object Browser мемберов этой библиотеки.
Думаю, после этого вопросы исчезнут.
Lasciate ogni speranza, voi ch'entrate.

Gloom
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 200
Зарегистрирован: 23.11.2004 (Вт) 15:57
Откуда: СПб

Сообщение Gloom » 09.06.2007 (Сб) 12:29

litvin22 писал(а):Ну, делается. На Луну тоже летают.
Вопрос как, хотя бы в общих чертах.

Примерчик для Excel:
Код: Выделить всё
Set vbModule = ActiveWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule)
vbModule.CodeModule.AddFromString "Public Sub HelloWorld" & vbCrLf & "MsgBox ""Hello, World!""" & vbCrLf & "End Sub"
Application.Run "HelloWorld"

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 09.06.2007 (Сб) 12:55

Вот тут все довольно подробно описано: http://www.cpearson.com/excel/vbe.htm
Привет,
KL

litvin22
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 01.06.2007 (Пт) 17:30
Откуда: Ставрополь

Сообщение litvin22 » 09.06.2007 (Сб) 16:56

Спасибо. Но возникли еще вопросы.
1. В разных примерах указывается по разному:
Код: Выделить всё
Application.VBE.ActiveVBProject.VBComponents(...).CodeModule
Application.VBE.CodePanes(...).CodeModule
ThisWorkbook.VBProject.VBComponents(...).CodeModule

вроде, работает и так и так, но ведь есть же разница
2. Если в скобках (...) ставить не "имя модуля", а его номер, где его можно узнать.
То есть его можно установить, запуская код типа
Код: Выделить всё
   For i = 1 To ThisWorkbook.VBProject.VBComponents.Count
        MsgBox i & "  " & ThisWorkbook.VBProject.VBComponents.Item(i).Name
    Next i
А вот как прочесть, наподобие того, как читают свойствам в Properties Windows


Вернуться в VBA

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

Сейчас этот форум просматривают: Yandex-бот и гости: 120

    TopList