Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2009, 09:37   #1
transgd
Пользователь
 
Регистрация: 16.04.2009
Сообщений: 37
По умолчанию Переменное имя объекта

Просьба ответить новичку в Visual Basic.
В таблице Excel у меня 31 кнопка CommandButton (по количеству дней в месяце).
Их имена отличаются только номером: с 1 до 31
(CommandButton1,CommandButton2 ...)
Хочется изменять свойства (ForeColor и т.п.) этих кнопок, не перебирая их
имена, а к примеру (который я не могу правильно написать):

Worksheets("табель").CommandButton & ddd & .ForeColor = 3

где ddd - как-раз этот номер кнопки в символьном выражении.
И еще вопрос: при нажатии на каждую из этих кнопок, обязательно
обрабатывать 31 событие CommandButton1-31_Click() или это можно упростить?
transgd вне форума Ответить с цитированием
Старый 16.04.2009, 10:01   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Я же говорил - без примера файла помочь будет сложно...
К примеру, кнопки бывают 2 видов. Откуда нам знать, какие у Вас в файле?

Цитата:
при нажатии на каждую из этих кнопок, обязательно
обрабатывать 31 событие CommandButton1-31_Click() или это можно упростить?
Если кнопки создаются программно, то всё просто (достаточно подредактировать макрос их создания)

Если же все эти кнопки созданы вручную - то придётся прописывать 31 строку (по строке для каждой кнопки)

По поводу раскраски кнопок - можно попробовать так:
Код:
Sub test()
    Dim sha As Shape
    For Each sha In Me.Shapes
        Debug.Print sha.Name
        If sha.Name Like "CommandButton*" Then
            ' изменяем параметры кнопки
        End If
    Next
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 16.04.2009, 10:37   #3
transgd
Пользователь
 
Регистрация: 16.04.2009
Сообщений: 37
По умолчанию

Вот часть кода:

With Worksheets("график").Range("D" & (7 + (cur_month - 1) * 8) & ":" & "AH" & (7 + (cur_month - 1) * 8))
For ii = 4 To 6
For jj = 6 To 16
dd = dd + 1
If val(.Cells(1, dd)) > 0 Then
Worksheets("табель").Cells(ii, jj) = .Cells(1, dd)
If .Cells(1, dd).Interior.ColorIndex = 3 Then
Worksheets("табель").CommandButton1 .ForeColor = 3
Else
Worksheets("табель").Cells(ii, jj).Interior.ColorIndex = 2
Worksheets("табель").CommandButton1 .ForeColor = 2
End If
End If
Next jj
Next ii
End With

Здесь на листе "табель" заполняются ячейки дней текущего месяца из листа "график". На листе "график" праздничные дни закрашены в красный цвет (.ColorIndex = 3). Хочется надписи кнопок (31 кнопка), номера которых соответствуют праздничным дням, тоже закрасить в .ColorIndex = 3.
В строках: Worksheets("табель").CommandButton1 .ForeColor =
необходимо вместо "1" использовать значение переменной "dd" (номер праздничного дня).
Вопрос: как это сделать?
transgd вне форума Ответить с цитированием
Старый 16.04.2009, 12:17   #4
transgd
Пользователь
 
Регистрация: 16.04.2009
Сообщений: 37
По умолчанию

Во вложении лежит файл таблицы.
Описываемый код находится в Workbook_Open()
Вложения
Тип файла: rar табельNew.rar (264.2 Кб, 30 просмотров)
transgd вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С помощью методов и свойств объекта осуществляется управление терминалом. Имя (идентификатор) объекта User>lia Общие вопросы Delphi 4 16.01.2009 16:37
при навелении на любой объект на форме в лабеле имя объекта Arkuz Общие вопросы Delphi 6 02.06.2008 09:15
Переменное имя создаваемого файла Degmax Win Api 2 27.03.2008 20:39