Основы офисного программирования и язык 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



<

Содержание  Назад  Вперед