Новости:

Интересные и полезные статьи по работе с Excel и VBA
можно найти в разделе ХИТРОСТИ

Главное меню

как включить запись макроса в режиме конструктора форм?

Автор Kibor, 19.07.2017, 09:03:39

« назад - далее »

Kibor

У меня задача такая, что мне надо динамически добавлять на форму элементы управления, менять их параметры, удалять в зависимости от действий пользователя. Т.е., классический способ создания формы - перетаскиванием элементов управления на форму из Toolbox - мне не подходит в принципе.
Идеальным решением для меня была бы запись макроса в режиме конструктора форм, но никак не найду, как это сделать. Важно: у меня Excel-2003.

Дмитрий Щербаков(The_Prist)

Это нельзя сделать. Такие элементы надо создавать на лету. Здесь я выкладывал небольшой пример, где есть подобное: Работа с модулями классов
За создание отвечает код вроде такого:
Me.Controls.Add("Forms.TextBox.1", "TextBox1")
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Kibor

"Даже самый простой вопрос можно превратить в проблему". Похоже, это мой случай. Я назвал макрорекордер идеальным решением по двум причинам. Во-первых, потому, что это самый простой, быстрый и надёжный способ узнать синтаксис нужной команды. Во-вторых, потому что я помню, что я это делал. Я тут сдул пыль с одного из своих старых файлов. У меня там небольшая формочка делалась. Смотрю код. Вверху модуля шапка:
' Макрос4 Макрос
' Макрос записан 10.06.99 (Киселёв Борис)
Стандартная шапка макрорекордера! То есть, 18 лет назад Excel такое делал! Мне и в голову не могло прийти, что теперь такое невозможно. Я подумал, что просто я не умею настроить Excel  как следует.
Я, естественно, попытался использовать Ваше предложение. Ничего не вышло. Набиваю текст Вашего примера, нажимаю Enter для завершения ввода строки и он сразу ругается: требует знак "=". В общем, и тут облом. Тем более, что я не понимаю, что с этим кодом делать - ни куда его вставить, ни как активировать.
Но проблема-то от обломов не исчезла! Мне по-прежнему нужен синтаксис команд добавления элементов управления на форму (который я, собственно, и хотел получить при помощи макрорекордера). Прошу прощения за нечётко сформулированный вопрос. Не подскажете, где можно найти этот синтаксис?

Дмитрий Щербаков(The_Prist)

Цитата: Kibor от 21.07.2017, 03:09:11Не подскажете, где можно найти этот синтаксис?
Видимо, не подскажу. Потому что не понимаю где у Вас форма расположена и как Вы её создаете.
Видимо, Вы все еще пытаетесь использовать макросы листов Excel 4. Если с ними Вам было проще - то создайте лист макросов или окно диалога: правая кнопка на ярлыке листа -Вставить. Выберите "Лист макросов Excel4" или "Окно диалога Excel5". Там вроде можно через макросы записать добавление элементов. Но можно ли будет это нормально применить - не уверен.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Юрий М

Цитата: Kibor от 21.07.2017, 03:09:1118 лет назад Excel такое делал! Мне и в голову не могло прийти, что теперь такое невозможно
Что-то я не помню, чтобы рекордер раньше писал создание форм/контролов...

Kibor

#5
Как создаю? Ответ на этот вопрос естественным образом распадается на две части.
   Часть 1. Как делал. Пожалуй, определение «через задницу» будет не далеко от истины. Вставил в файл модуль кода. В нем:
Sub Frame_1()
   DialogSheets.Add
   ActiveSheet.Name = "DS1"
   ActiveSheet.DialogFrame.Select
   .
   .
   ActiveSheet.DropDowns.Add(Clas_DD_L, Clas_DD_T, Clas_DD_W, Clas_DD_H, False).Select
   Selection.Name = "Clas"
   .
   .
End Sub

Т.е., форма создавалась не в модуле формы, а на обычном листе. Всего на ней два десятка элементов типов Label, DropDown, ListBox. В 1999-м форма работала. Запустил под 2003-м – работает. Проверил под 2007-м – работает. Почему я тогда делал именно так – сейчас уже и не вспомню. Скорее всего, по классике что-то не получилось.

   Часть 2. Как хочу. «Через задницу» больше не хочу. Хочу научиться делать как люди – добавить в проект модуль формы и работать в нём. В 63 учиться не поздно, дорогой Священник! Но мне  надо добавлять элементы управления на форму КОДОМ, а не мышкой. Если это невозможно в принципе, так сразу и скажите. Я отползу в дальний конец окопа, тихонько там застрелюсь и не буду больше тратить Ваше время. Кстати, я попробовал применить в модуле формы приведенную здесь строку кода, которая добавляет DropDown. Матерится! Для модуля формы синтаксис явно другой. А сейчас мне надо добавить CommandButton, которой у меня в той старинной форме не было вообще.

Дмитрий Щербаков(The_Prist)

Цитата: Kibor от 25.07.2017, 08:11:53Если это невозможно в принципе, так сразу и скажите
Это возможно и я первым же сообщением показал как.
Если делать все по уму, то надо не лист диалога вставлять, а нормальную UserForm: переходите в редактор VBE(Alt+F11) -Insert -UserForm.
А потом на неё накидываете контролов. Правда, если Вы это будете делать впервые, то придется туговато.
По ссылке, которую я в самом начале дал, есть пример файл с кодом и пояснениями. Да и в статье я все разложил по полочкам. Если скачаете файл, приложенный к статье, то сможете посмотреть что там за форма и как происходит добавление элементов.
Если это будет сложно - то советую зайти в раздел Книги(http://www.excel-vba.ru/general/knigi-dlya-izucheniya-excel-i-vba/) и подобрать себе что-нибудь для изучения новых границ.
Удачи!
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

parovoz


Яндекс.Метрика Рейтинг@Mail.ru