Тверской государственный университет
Опубликован: 13.09.2006 | Доступ: свободный | Студентов: 3491 / 369 | Оценка: 4.65 / 4.29 | Длительность: 30:37:00
Специальности: Программист, Менеджер
Дополнительный материал 1:

Приложение

< Лекция 15 || Дополнительный материал 1: 123

Вопрос второй: "Как импортировать VBComponent, если компонент с таким именем уже присутствует в программе (соответственно выдается ошибка при попытке импорта)?"

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

Но обо всем по порядку. Несколько слов о самом примере. В наш документ, содержащий форму со стандартным именем 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

< Лекция 15 || Дополнительный материал 1: 123
полина есенкова
полина есенкова
Дмитрий Вологжин
Дмитрий Вологжин
Добрый день, прошел тесты с 1 по 9, 10 не сдал, стал читать лекцию и всё пройденные тесты с 1 по 9 сбросились, когда захотел пересдать 10 тест.