powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / OptionButton в цикле
21 сообщений из 21, страница 1 из 1
OptionButton в цикле
    #34109391
Dunjasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, как обработать OptionButton в цикле? Расположены на листе Excel, неограниченное количество. Если OptonButton=True, должны выполняться некоторые действия.
...
Рейтинг: 0 / 0
OptionButton в цикле
    #34109504
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
используй массив контролей
каждый контроль имеет одно имя и разный номер
свойство index
в цикле перебрать контроли

вызов Option(index).checked
...
Рейтинг: 0 / 0
OptionButton в цикле
    #34109548
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VBA не поддерживает массивы контролов. Можно перебрать только UserForm.Controls целиком.
...
Рейтинг: 0 / 0
OptionButton в цикле
    #34109568
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошу прощения
не увидел что Excel

перебор колекции обьектов и проверка по типу контроля
...
Рейтинг: 0 / 0
OptionButton в цикле
    #34109637
Dunjasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
помогите все это написать, пожалуйста
...
Рейтинг: 0 / 0
OptionButton в цикле
    #34109800
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dunjashaпомогите все это написать, пожалуйста
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub CommandButton1_Click()
    Dim iCtrl As Control
    For Each iCtrl In Me.Controls
        If TypeName(iCtrl) = "OptionButton" Then
            If iCtrl.Value = - 1  Then MsgBox "Checked"
        End If
    Next iCtrl
End Sub
...
Рейтинг: 0 / 0
OptionButton в цикле
    #34109869
Dunjasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
выдает ошибку на For Each iCtrl In Me.Controls
...
Рейтинг: 0 / 0
OptionButton в цикле
    #34110013
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub CommandButton1_Click()
    Dim iCtrl As Control
    For Each iCtrl In Workbooks(...).Worksheets(...).Controls
        If TypeName(iCtrl) = "OptionButton" Then
            If iCtrl.Value = - 1  Then MsgBox "Checked"
        End If
    Next iCtrl
End Sub
...
Рейтинг: 0 / 0
OptionButton в цикле
    #34110033
Dunjasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkodor
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub CommandButton1_Click()
    Dim iCtrl As Control
    For Each iCtrl In Workbooks(...).Worksheets(...).Controls
        If TypeName(iCtrl) = "OptionButton" Then
            If iCtrl.Value = - 1  Then MsgBox "Checked"
        End If
    Next iCtrl
End Sub


Object doesn't support this property or method
...
Рейтинг: 0 / 0
OptionButton в цикле
    #34110061
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я не увидел, что на листе...
У листа нет коллекции Controls, обращение происходит напрямую: Worksheets(...).OptionButton1.Value, поэтому перебрать их получится только через CallByName.
...
Рейтинг: 0 / 0
OptionButton в цикле
    #34110099
Dunjasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyА я не увидел, что на листе...
У листа нет коллекции Controls, обращение происходит напрямую: Worksheets(...).OptionButton1.Value, поэтому перебрать их получится только через CallByName.
Как это написать?
...
Рейтинг: 0 / 0
OptionButton в цикле
    #34110424
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim x As Integer
Dim op As Object
On Error Resume Next
x =  1 
While Err.Number =  0 
    Set op = CallByName(Worksheets( 1 ), "OptionButton" & x, VbGet)
    If Err.Number =  0  Then
        Debug.Print op.Value
        x = x +  1 
    End If
Wend
...
Рейтинг: 0 / 0
OptionButton в цикле
    #34113188
Dunjasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim x As Integer
Dim op As Object
On Error Resume Next
x =  1 
While Err.Number =  0 
    Set op = CallByName(Worksheets( 1 ), "OptionButton" & x, VbGet)
    If Err.Number =  0  Then
        Debug.Print op.Value
        x = x +  1 
    End If
Wend

Объясните пожалуйста... Мне нужно определить номер OptionButton в котором точка, чтобы связать его с номером строки. Я не понимаю, откуда мне здесь его вытащить?
...
Рейтинг: 0 / 0
OptionButton в цикле
    #34113908
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
While Err.Number =  0  'выполняем цикл до тех пор, пока попытка получить очередную OptionButton не вызовет ошибку
    Set op = CallByName(Worksheets( 1 ), "OptionButton" & x, VbGet) 'получение ссылки на очередную кнопку
    If Err.Number =  0  Then 'если ссылка получена...
        Debug.Print op.Value '... печатаем ее начение, True - выбрана, False - нет
        x = x +  1  'увеличиваем счетчик, значение которого определяет название кнопки
    End If
Wend
Если и после этого непонятно, завязывай с программированием.
...
Рейтинг: 0 / 0
OptionButton в цикле
    #34113972
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dunjasha,

Вот тебе пример без On Error Resume Next и без CallByName:

Private Sub CommandButton1_Click()
Dim objOLE As OLEObject
Dim objWSht As Worksheet

Set objWSht = ActiveSheet

For Each objOLE In objWSht.OLEObjects
If objOLE.progID = "Forms.OptionButton.1" Then
objOLE.Shadow = objOLE.Object.Value
End If
Next objOLE

End Sub

Он рисует рамку вокруг отмеченной OptonButton и убирает с неотмеченных.

Пример для Control Toolbox контролей.

Успехов.

VladConn
...
Рейтинг: 0 / 0
OptionButton в цикле
    #34113977
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

Как ваш пример будет работать, если контролям приданы осмысленные имена (что на самом деле и должно ожидаться)?

VladConn
...
Рейтинг: 0 / 0
OptionButton в цикле
    #34113979
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A также в случае "провала" их сквозной нумерации?
...
Рейтинг: 0 / 0
OptionButton в цикле
    #34113988
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И с каких это пор значение счетчика определяет название кнопки? Лично я по этому вопросу с ним не советуюсь.

Мда..
...
Рейтинг: 0 / 0
OptionButton в цикле
    #34113995
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И кстати, вот это утверждение " ... поэтому перебрать их получится только через CallByName. " ложно.
...
Рейтинг: 0 / 0
OptionButton в цикле
    #34114509
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, насчет OLEObjects запамятовал, а насчет названий - я так понял, что если есть потребность перебирать их в цикле, значит их слишком много, чтобы обращаться к каждой по имени-отчеству, в таком случае непродуктивно задавать осмысленное имя каждой, вполне достаточно стандартных имен.
...
Рейтинг: 0 / 0
OptionButton в цикле
    #34116647
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OK
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / OptionButton в цикле
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]