Новости:

К первому сообщению темы должен быть прикреплен файл примера в формате xls*.
Приложив пример, Вы избавите себя и других от вопросов типа "А какой критерий?", "А куда выводить результат?", "А сколько строк?" и все тех же просьб выложить файл. Рисовать за Вас Ваши же таблички с заданиями, а затем и решение к ним, никто желанием не горит. Да и, как показывает практика, в большинстве случаев без файла решения не найти.

Главное меню

Как с помощью цикла изменить несколько однотипных элеметнтов управления?

Автор Саша Капитанов, 04.05.2014, 13:01

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

Саша Капитанов

День добрый!
Решил вот написать текстовый квест на экселе :)
По ходу создания страницы с характеристиками перса возникла необходимость постоянно обрабатывать большое число кнопок, коих на всю страницу предполагается штук 300.. а то и больше
Имена кнопок в большинстве своем между собой отличаются только номером
Strength_1_null
Strength_2_null
Strength_3_null
...
Например, есть кнопка, задача которой - по щелчку окрашивать все выше упомянутые в цвет фона единой для всех ячейки.
Рабочий код сейчас такого вида:

Strength_1_null.BackColor = Range("D296").Interior.Color
    Strength_1_null.ForeColor = Range("D296").Font.Color
        Strength_1_spin.BackColor = Range("D296").Interior.Color
        Strength_1_spin.ForeColor = Range("D296").Font.Color
    Strength_2_null.BackColor = Range("D296").Interior.Color
    Strength_2_null.ForeColor = Range("D296").Font.Color
        Strength_2_spin.BackColor = Range("D296").Interior.Color
        Strength_2_spin.ForeColor = Range("D296").Font.Color
    Strength_3_null.BackColor = Range("D296").Interior.Color
    Strength_3_null.ForeColor = Range("D296").Font.Color
        Strength_3_spin.BackColor = Range("D296").Interior.Color
        Strength_3_spin.ForeColor = Range("D296").Font.Color
    Strength_4_null.BackColor = Range("D296").Interior.Color
    Strength_4_null.ForeColor = Range("D296").Font.Color
        Strength_4_spin.BackColor = Range("D296").Interior.Color
        Strength_4_spin.ForeColor = Range("D296").Font.Color
    Strength_5_null.BackColor = Range("D296").Interior.Color
    Strength_5_null.ForeColor = Range("D296").Font.Color
        Strength_5_spin.BackColor = Range("D296").Interior.Color
        Strength_5_spin.ForeColor = Range("D296").Font.Color
    Strength_6_null.BackColor = Range("D296").Interior.Color
    Strength_6_null.ForeColor = Range("D296").Font.Color
        Strength_6_spin.BackColor = Range("D296").Interior.Color
        Strength_6_spin.ForeColor = Range("D296").Font.Color
    Strength_7_null.BackColor = Range("D296").Interior.Color
    Strength_7_null.ForeColor = Range("D296").Font.Color
        Strength_7_spin.BackColor = Range("D296").Interior.Color
        Strength_7_spin.ForeColor = Range("D296").Font.Color
    Strength_8_null.BackColor = Range("D296").Interior.Color
    Strength_8_null.ForeColor = Range("D296").Font.Color
        Strength_8_spin.BackColor = Range("D296").Interior.Color
        Strength_8_spin.ForeColor = Range("D296").Font.Color
    Strength_9_null.BackColor = Range("D296").Interior.Color
    Strength_9_null.ForeColor = Range("D296").Font.Color
        Strength_9_spin.BackColor = Range("D296").Interior.Color
        Strength_9_spin.ForeColor = Range("D296").Font.Color


То есть разница между строками - только в номере в имени окрашиваемой кнопки.
Как можно решить такую задачу, например, с помощью цикла? Интересен синтаксис, попробовал вот так:

For n_color = 1 To 9
       ActiveSheet.Shapes("Strength_" & n_color & "_null").BackColor = Range("D296").Interior.Color
       ActiveSheet.Shapes("Strength_" & n_color & "_null").ForeColor = Range("D296").Font.Color
           ActiveSheet.Shapes("Strength_" & n_color & "_spin").BackColor = Range("D296").Interior.Color
           ActiveSheet.Shapes("Strength_" & n_color & "_spin").ForeColor = Range("D296").Font.Color
   Next n_color


Но не работает, пишет Object doesn't support this property or method

Вопрос - как правильно вставить переменную-счетчик цикла в имя кнопки, если это возможно. Или иные пути решения задачи без копирования строки каждый раз.

portajgenosse

Думаю цикл надо сделать не по переменной, а по коллекции For Each,,,, In. Я точно не помню насчет наличия свойства BackColor у объекта Shape. Лучше использовать вместо Shapes OLEObjects.