Вопрос № 140495: Имеется форма с компонентами. Как переименовать между собой два любых компонента c заданными именами? Поменять свойства Name? Имена компонентов задаются пользователем. Например, пользователь задает — компонент с именем L1 поменять име...
Вопрос № 140.495
Имеется форма с компонентами. Как переименовать между собой два любых компонента c заданными именами? Поменять свойства Name? Имена компонентов задаются пользователем. Например, пользователь задает — компонент с именем L1 поменять именем с компонентом Т2. Тип компонентов неизвестен. В принципе ход решения задачи понятен:
Ищем компонент с нужным именем Его имя присваиваем временной переменной Имя второго компонента присваиваем первому Переименовуем второй компонент
по временной переменной
Вопрос в том, как получить доступ к свойствам компонентов формы по именам. Пробовал через Me.Controls, но не получается.
Отвечает: xackera
Здравствуйте, Витер Александр Анатольевич! Свойства Name у компонентов и переменных VBA во время выполнения программы не меняется! можно обойти это ограничение - создаёте массив компонент (желательно, чтобы компонента имела поле Caption или аналог, который мог бы указывать на данный компонент)... и при перемене местами имён (как бы) меняете местами свойство Caption. Поиск компоненты производиться по данному свойству.... Например это можно сделать так: Создаёте свой тип данных Type MyType Obj
As Object 'в этом месте будем хранить ссылку на объект Name As String End Type
обявляем массив данного типа Dim A (10) as MyType
и где нибудь в коде присваиваем значения a(1).Name = "Объект 1" Set a(1).Obj = ActiveWorkbook.Sheets(0) 'первый лист книги Excel и так далее
обмен делаете через временную переменную
навигацию производите по полю Name типа MyType
--------- Больше быть, чем казаться! Много делать, но мало выделяться
Ответ отправил: xackera (статус: 6-ой класс)
Ответ отправлен: 22.07.2008, 17:36 Оценка за ответ: 4 Комментарий оценки: Правильно, но нужно для другого языка