Основы офисного программирования и язык VBA

         

Вопрос второй: "Как импортировать


Ответ, кажется, очевидным - нужно переименовать один из компонентов, поскольку, действительно не могут существовать два компонента с одним именем. Какой же из компонентов переименовывать? Здесь тоже все достаточно ясно, - импортируемый компонент программно в момент его добавления не переименуешь, поскольку он скрыт в файле. Поэтому остается переименовать компонент в самом проекте. Остается понять, какой именно компонент вызвал коллизию и требует переименования. Часто подсказкой может служить имя файла с импортируемым компонентом, поскольку по умолчанию имя файла совпадает с именем компонента. В моем примере я переименовываю все компоненты текущего проекта. Это одно из возможных решений. Главное, демонстрируется возможность переименования компонент.

Но обо всем по порядку. Несколько слов о самом примере. В наш документ, содержащий форму со стандартным именем UserForm1, программно импортируются еще две формы. Обе они были экспортированы из другого документа, сохранены в виде файлов, и поскольку имели стандартные имена, то и файлы (по два файла на форму с уточнениями "frm" и "frx") получили имена "UserForm1" и "UserForm2". Вот процедура, осуществляющая импорт:

Public Sub ImportForm() 'Эта процедура импортирует формы, сохраненные в файле Documents("Answer1.doc").VBProject.VBComponents.Import ("e:\O2000\cd2000\tests\UserForm1.frm") Documents("Answer1.doc").VBProject.VBComponents.Import ("e:\O2000\cd2000\tests\UserForm2.frm")

End Sub

Очевидно, что при запуске этой процедуры возникнет конфликт имен (два компонента - две формы имеют одно и то же имя "UserForm1") и при выполнении первого же оператора возникнет ошибка. Если же предварительно запустить процедуру Rename, переименовывающую объекты класса VBComponent, то импорт пройдет гладко. Разумно, конечно, запускать процедуру Rename в обработчике исключительной ситуации, когда конфликт реально возник. Вот возможный вариант процедуры Rename:

Public Sub Rename() Dim Comp As Object

For Each Comp In Documents("Answer1").VBProject.VBComponents Debug.Print Comp.Name Comp.Name = Comp.Name & "New" Debug.Print Comp.Name Next Comp

End Sub

Вот результаты отладочной печати, показывающей, какие компоненты проекта будут переименованы:

ThisDocument ThisDocumentNew Sample SampleNew UserForm1 UserForm1New

После переименования импорт происходит без проблем.

На два вопроса Ивана Кряжева ответы даны.

Если Вы хотите задать свои вопросы, напоминаю мой адрес: Vladimir.Billig@tversu.ru




© 2003-2007 INTUIT.ru. Все права защищены.
Содержание раздела