Control Array в Excel. Как создать?

Программирование на Visual Basic for Applications
MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Control Array в Excel. Как создать?

Сообщение MEMBER » 04.12.2003 (Чт) 12:00

Имеется 71 чекбокс, расположены они на листе, можно сделать control array, или нет?
Требуется по нажатию кнопки снимать галки во всех чекбоксах.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 04.12.2003 (Чт) 12:32

Никак, в VBA нет индексированных контролов.
Можно сделать Controls("CheckBox" & I).Value = ...
Lasciate ogni speranza, voi ch'entrate.

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 04.12.2003 (Чт) 12:37

Они не на форме расположены. На листе. А Controls относится к форме.
Или я чего не понял?
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 04.12.2003 (Чт) 12:55

Ну есть же в Excel коллекция Sheet.OLEObjects вот в ней и содержатся все контролы на листе в том числе. Вот по ней пробегайся и смотри, если тип объекта это контрол-чекбокс, то и сбрасывай галку.

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 04.12.2003 (Чт) 13:02

Не умею.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 04.12.2003 (Чт) 13:17

Код: Выделить всё
for each obj in activesheet.oleobjects
if typeof obj.object is checkbox then obj.object.value = false
next obj

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 04.12.2003 (Чт) 13:32

Спасибо. Ваш вариант не работает, но он натолкнул меня на мысль.
Сделал, в общем.
И, чтобы не плодить тем, не подскажете, как определить номер ячейки в которой находится чекбокс.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 04.12.2003 (Чт) 13:45

Хм, интересно, а что именно в нем не работает? ;) Может, конечно, дело в разных версиях офиса, но в моем ХР это точно работает.



А номер ячейки узнается как TopLeftCell.Column и TopLeftCell.Row

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 04.12.2003 (Чт) 13:47

В obj.object возвращается не тип контрола, а его значение.
Спасибо.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 04.12.2003 (Чт) 13:51

RTFM! Про то, что такое TypeOf.

В смысле что в Object возвращается объект, сожержащийся в OLEObject. Его то тип и анализируется.

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 04.12.2003 (Чт) 14:31

*всхлипывая*
Бааатькааа, не трави дуушууу...
Скажиииии...
:)
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 04.12.2003 (Чт) 15:34

Что сказаааать тооооо!! ;)

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 04.12.2003 (Чт) 15:35

Как заставить вышеприведённый код работать.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 04.12.2003 (Чт) 15:50

Он, это, работает :)

Офис то у тебя какой? ;)

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 04.12.2003 (Чт) 15:54

97
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 04.12.2003 (Чт) 16:08

Вопрос снят. Насчет 97 ничего сказать не могу. Раве что апгрейд посоветовать.

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 04.12.2003 (Чт) 17:38

Ясно. 2000 подойдёт?
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 04.12.2003 (Чт) 17:39

Думаю, что да. У меня ХР SP1 но скорее всего в нем эта фича идентична тому, что в 2000.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.12.2003 (Пт) 9:57

MEMBER, дружище! У меня тоже 97! Рулез форева! :twisted:

Если ты использовал контролы с панели "Формы", то они в коллекции Shapes, а если с панели "Элементы управления" - то коллекция Controls.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 05.12.2003 (Пт) 16:02

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

'создаем массив указателей, можно и не Variant, а тип элемента
dim mas(71) as variant

'устанавливаем указатели
set mas(1) = checkBox1
.
.
set mas(71) = checkBox71

'а вот пример обработки
for i=1 to 71
mas(i).value =false
next i

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 08.12.2003 (Пн) 18:15

Спасибо.
Я уже сделал. Совсем по другому. :)
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 51

    TopList