Как перебрать все CheckBox'ы на листе??
, ???
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.43] |
|
|
Организуем VBA-FAQ! Если у Вас есть предложения, выскажитесь здесь: Пишем FAQ, интересно Ваше мнение
Общие вопросы
Особенности VBA-кода
Оптимизация VBA-кода
Полезные ссылки
Как перебрать все CheckBox'ы на листе??
, ???
|
Сообщ.
#1
,
|
|
|
|
Суть проблемы такова:
На листе имеется порядка 70 записей, напротив каждой стоит CheckBox1, CheckBox2,.... и т.д. Требуется создать Кнопку "Отметить все" то есть Все CheckBox.Value = True CheckBox1.Value = True CheckBox2.Value = True ..... CheckBox69.Value = True CheckBox70.Value = True Так все дело работает. А можно ли сделать это грубо говоря так ??? for i=1 to 70 CheckBox(i).Value = true Next |
|
Сообщ.
#2
,
|
|
|
|
![]() ![]() for i=1 to 70 Controls("CheckBox" & CStr(i)).Value = true Next |
|
Сообщ.
#3
,
|
|
|
|
Цитата Akina @ ![]() ![]() for i=1 to 70 Controls("CheckBox" & CStr(i)).Value = true Next ругается на Controls "Sub or Function not defined" Может объявить что то надо??? |
|
Сообщ.
#4
,
|
|
|
|
Ну напиши Me.Controls
|
|
Сообщ.
#5
,
|
|
|
|
Цитата Akina @ Ну напиши Me.Controls Все равно ругается "Method or data member not found" |
|
Сообщ.
#6
,
|
|
|
|
Зазипуй файл и приложи к сообщению
|
|
Сообщ.
#7
,
|
|
|
|
Цитата Akina @ Зазипуй файл и приложи к сообщению Вот! Прикреплённый файл Общая.zip (82.97 Кбайт, скачиваний: 315)
|
|
Сообщ.
#8
,
|
|
|
|
![]() ![]() Dim CheckBoxName As String Dim CheckBoxObject As Variant For i = 1 To 70 CheckBoxName = "CheckBox" & CStr(i) Set CheckBoxObject = Me.Evaluate(CheckBoxName) CheckBoxObject.Object.Value = True Next |
|
Сообщ.
#9
,
|
|
|
|
Респект и уважуха ))))
Я два дня голову ломаю Синтаксис ё-маё ![]() Все получилось )) |
|
Сообщ.
#10
,
|
|
|
|
Цитата calam4uk @ Синтаксис ё-маё Я расписАл в три строки, чтобы было понятно, как всё происходит. Но можно собрать всё это в одну строку и не использовать промежуточных переменных. |
|
Сообщ.
#11
,
|
|
|
|
Цитата Akina @ Цитата calam4uk @ Синтаксис ё-маё Я расписАл в три строки, чтобы было понятно, как всё происходит. Но можно собрать всё это в одну строку и не использовать промежуточных переменных. Да это я понял!!! Спасибо))) |
|
Сообщ.
#12
,
|
|
|
|
calam4uk, вот Вам ещё один вариант:
![]() ![]() Option Compare Text ... Dim objControl As Control For Each objControl In Me.Controls If TypeName(objControl) = "CheckBox" Then objControl.Value = False End If Next Кстати, учтите, что при установке значения "коробочки" произойдёт вызов соответствующего обработчика события Click. |
|
Сообщ.
#13
,
|
|
|
|
Dmitrii, посмотри его файл. Контролы - не на форме, так что не сработает.
|
|
Сообщ.
#14
,
|
|
|
|
Цитата Akina @ Тогда так:Контролы - не на форме... ![]() ![]() Option Compare Text ... Dim objControl As OLEObject For Each objControl In Me.OLEObjects If Left(objControl.Name, 8) = "CheckBox" Then Me.Shapes(objControl.Name).OLEFormat.Object.Object.Value = False End If Next Код надо разместить в модуле листа, "контролы" которого обрабатываются. calam4uk, если вдруг захотите использовать "коробочки" из панели "Формы", а не из панели "Элементы управления", то обращение к ним можно организовать так: ![]() ![]() Sub Example() For i = 1 To ActiveSheet.CheckBoxes.Count ActiveSheet.CheckBoxes(i).Value = False Next End Sub |