Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как обратиться к динамически созданному массиву CheckBox - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как обратиться к динамически созданному массиву CheckBox (Макросы/Sub)
Как обратиться к динамически созданному массиву CheckBox
Oleg34 Дата: Суббота, 13.10.2018, 15:40 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте! Подскажите, как узнать, какой CheckBox активирован, если массив создан динамически?
по условию создаю массив из TextBox в которые вношу фамилии и CheckBox для дальнейшего выбора:
[vba]
Код

Private Sub UserForm_Activate()
Dim i As Integer
Dim arrFIO(21)
Dim TxtFio(20) As Object
Dim ChKFio(20) As Object
Dim countT As Integer

countT = 0
For i = 0 To 20
    If Cells(i + 5, 3).Value = "a" Then 'если в столбце "С" стоит галочка
        arrFIO(i) = Cells(i + 5, 2) 'добавляю в массив фамилию из столбца "B",отмеченную галочкой
        Set TxtFio(i) = Me.Controls("Frame1").Add("Forms.TextBox.1") 'добавляю на форму TextBox
        Set ChKFio(i) = Me.Controls("Frame1").Add("forms.CheckBox.1") 'добавляю на форму CheckBox
           With TxtFio(i) 'задаю параметры TextBox
                .Top = 20 + 16 * countT
                .Height = 16
                .Left = 10
                .Width = 100
                .Text = arrFIO(i) 'записываю в TextBox из массива arrFIO
           End With
           With ChKFio(i) 'задаю параметры CheckBox
                .Top = 20 + 16 * countT
                .Height = 16
                .Left = 10 + 102
                .Width = 100
                .Caption = (i)
           End With
           countT = countT + 1
    End If
    Next
End Sub
[/vba]
пытаюсь добраться до CheckBox так:
[vba]
Код

Private Sub UserForm_Click()
Dim X As Object
Dim chk As String
    For i = 0 To Me.Frame1.Controls.count - 1
       For Each X In Me.Frame1.Controls
           If X.TabIndex = i Then
               If TypeOf Me.Frame1.Controls(i) Is MSForms.CheckBox Then 'проверка, что это CheckBox
                    If Me.Frame1.Controls("CheckBox" & i).Value = True Then '3
                    chk = "CheckBox" & i
                    MsgBox chk
                    End If
                End If
            End If
        Next
    Next
End Sub
[/vba]
но, безуспешно(((
 
Ответить
СообщениеЗдравствуйте! Подскажите, как узнать, какой CheckBox активирован, если массив создан динамически?
по условию создаю массив из TextBox в которые вношу фамилии и CheckBox для дальнейшего выбора:
[vba]
Код

Private Sub UserForm_Activate()
Dim i As Integer
Dim arrFIO(21)
Dim TxtFio(20) As Object
Dim ChKFio(20) As Object
Dim countT As Integer

countT = 0
For i = 0 To 20
    If Cells(i + 5, 3).Value = "a" Then 'если в столбце "С" стоит галочка
        arrFIO(i) = Cells(i + 5, 2) 'добавляю в массив фамилию из столбца "B",отмеченную галочкой
        Set TxtFio(i) = Me.Controls("Frame1").Add("Forms.TextBox.1") 'добавляю на форму TextBox
        Set ChKFio(i) = Me.Controls("Frame1").Add("forms.CheckBox.1") 'добавляю на форму CheckBox
           With TxtFio(i) 'задаю параметры TextBox
                .Top = 20 + 16 * countT
                .Height = 16
                .Left = 10
                .Width = 100
                .Text = arrFIO(i) 'записываю в TextBox из массива arrFIO
           End With
           With ChKFio(i) 'задаю параметры CheckBox
                .Top = 20 + 16 * countT
                .Height = 16
                .Left = 10 + 102
                .Width = 100
                .Caption = (i)
           End With
           countT = countT + 1
    End If
    Next
End Sub
[/vba]
пытаюсь добраться до CheckBox так:
[vba]
Код

Private Sub UserForm_Click()
Dim X As Object
Dim chk As String
    For i = 0 To Me.Frame1.Controls.count - 1
       For Each X In Me.Frame1.Controls
           If X.TabIndex = i Then
               If TypeOf Me.Frame1.Controls(i) Is MSForms.CheckBox Then 'проверка, что это CheckBox
                    If Me.Frame1.Controls("CheckBox" & i).Value = True Then '3
                    chk = "CheckBox" & i
                    MsgBox chk
                    End If
                End If
            End If
        Next
    Next
End Sub
[/vba]
но, безуспешно(((

Автор - Oleg34
Дата добавления - 13.10.2018 в 15:40
Апострофф Дата: Суббота, 13.10.2018, 16:47 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 162
Репутация: 65 ±
Замечаний: 0% ±

Excel 2003
Oleg34, и Вам не хворать!
1 - зачем двойной (вложенный) цикл по одним и тем же контролам
    For i = 0 To Me.Frame1.Controls.count - 1
    For Each X In Me.Frame1.Controls

2 - зачем эта проверка на табиндекс
        If X.TabIndex = i Then
?
Но даже при этом на пустой форме (с одним Frame1) результат (меседжи) были получены, может стоит сам файл показать?
 
Ответить
СообщениеOleg34, и Вам не хворать!
1 - зачем двойной (вложенный) цикл по одним и тем же контролам
    For i = 0 To Me.Frame1.Controls.count - 1
    For Each X In Me.Frame1.Controls

2 - зачем эта проверка на табиндекс
        If X.TabIndex = i Then
?
Но даже при этом на пустой форме (с одним Frame1) результат (меседжи) были получены, может стоит сам файл показать?

Автор - Апострофф
Дата добавления - 13.10.2018 в 16:47
Oleg34 Дата: Суббота, 13.10.2018, 17:19 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Цитата Апострофф, 13.10.2018 в 16:47, в сообщении № 2 ()
может стоит сам файл показать
К сообщению приложен файл: 1155297.xlsm(20.8 Kb)
 
Ответить
Сообщение
Цитата Апострофф, 13.10.2018 в 16:47, в сообщении № 2 ()
может стоит сам файл показать

Автор - Oleg34
Дата добавления - 13.10.2018 в 17:19
Pelena Дата: Суббота, 13.10.2018, 17:45 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 13220
Репутация: 2908 ±
Замечаний: ±

Excel 2010, 2016 & Mac Excel
Не совсем понятно, что Вы хотите получить. Может, так
[vba]
Код
    Dim X As Object
    Dim chk As String
    i = 0
    For Each X In Me.Frame1.Controls
        If TypeOf X Is MSForms.CheckBox Then    'проверка, что это CheckBox
            If X.Value = True Then    '3
                chk = "Checkbox " & X.Caption
                MsgBox chk
            End If
        End If
        i = i + 1
    Next
[/vba]


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеНе совсем понятно, что Вы хотите получить. Может, так
[vba]
Код
    Dim X As Object
    Dim chk As String
    i = 0
    For Each X In Me.Frame1.Controls
        If TypeOf X Is MSForms.CheckBox Then    'проверка, что это CheckBox
            If X.Value = True Then    '3
                chk = "Checkbox " & X.Caption
                MsgBox chk
            End If
        End If
        i = i + 1
    Next
[/vba]

Автор - Pelena
Дата добавления - 13.10.2018 в 17:45
Апострофф Дата: Суббота, 13.10.2018, 17:50 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 162
Репутация: 65 ±
Замечаний: 0% ±

Excel 2003
[vba]
Код
Private Sub UserForm_Click()
Dim X As Object
For Each X In Me.Frame1.Controls
  If TypeOf X Is MSForms.CheckBox Then
    If X Then MsgBox X.Name
  End If
Next
End Sub
[/vba]
off/ опоздал :)


Сообщение отредактировал Апострофф - Суббота, 13.10.2018, 17:51
 
Ответить
Сообщение[vba]
Код
Private Sub UserForm_Click()
Dim X As Object
For Each X In Me.Frame1.Controls
  If TypeOf X Is MSForms.CheckBox Then
    If X Then MsgBox X.Name
  End If
Next
End Sub
[/vba]
off/ опоздал :)

Автор - Апострофф
Дата добавления - 13.10.2018 в 17:50
Oleg34 Дата: Суббота, 13.10.2018, 17:56 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
что Вы хотите получить

я хотел бы при активации chekbox обработать данные по работнику. Если checkbox кинут на Форму, то я могу к нему обращаться через CheckBox2_Click(), напримерБ если я выбрал CheckBox2 то:
[vba]
Код
Private Sub CheckBox2_Click()

    If CheckBox2.Value = False Then
        TextBox3.Visible = False
        Exit Sub
    End If
    
    Select Case ComboBox5.Text
        Case ""
            CheckBox2.Value = False
            MsgBox "Выбирете производственное задание", vbOKOnly
            ComboBox5.SetFocus
        Case "погрузка производственного мусора", "уборка производственных помещений"
        Case Else
            Me.TextBox3.Visible = True
    End Select
End Sub
[/vba]
Вот, что то типо этого я и пробовал сделать(
 
Ответить
Сообщение
что Вы хотите получить

я хотел бы при активации chekbox обработать данные по работнику. Если checkbox кинут на Форму, то я могу к нему обращаться через CheckBox2_Click(), напримерБ если я выбрал CheckBox2 то:
[vba]
Код
Private Sub CheckBox2_Click()

    If CheckBox2.Value = False Then
        TextBox3.Visible = False
        Exit Sub
    End If
    
    Select Case ComboBox5.Text
        Case ""
            CheckBox2.Value = False
            MsgBox "Выбирете производственное задание", vbOKOnly
            ComboBox5.SetFocus
        Case "погрузка производственного мусора", "уборка производственных помещений"
        Case Else
            Me.TextBox3.Visible = True
    End Select
End Sub
[/vba]
Вот, что то типо этого я и пробовал сделать(

Автор - Oleg34
Дата добавления - 13.10.2018 в 17:56
Pelena Дата: Суббота, 13.10.2018, 18:25 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 13220
Репутация: 2908 ±
Замечаний: ±

Excel 2010, 2016 & Mac Excel
Если Вы хотите отследить событие программно созданного элемента на форме, надо создавать модуль класса. Вот здесь хорошо написано, даже пример про Checkbox'ы есть. Где-то и на этом форуме была подобная тема, но не могу сейчас найти( Вот она Там про Combobox'ы

Вопрос в другом, стоит ли так заморачиваться? Не проще создать много элементов (с запасом), а видимыми делать только нужное количество?


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеЕсли Вы хотите отследить событие программно созданного элемента на форме, надо создавать модуль класса. Вот здесь хорошо написано, даже пример про Checkbox'ы есть. Где-то и на этом форуме была подобная тема, но не могу сейчас найти( Вот она Там про Combobox'ы

Вопрос в другом, стоит ли так заморачиваться? Не проще создать много элементов (с запасом), а видимыми делать только нужное количество?

Автор - Pelena
Дата добавления - 13.10.2018 в 18:25
Oleg34 Дата: Суббота, 13.10.2018, 18:50 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
видимыми делать только нужное количество

Да, наверное так проще будет. Спасибо)))
 
Ответить
Сообщение
видимыми делать только нужное количество

Да, наверное так проще будет. Спасибо)))

Автор - Oleg34
Дата добавления - 13.10.2018 в 18:50
Oleg34 Дата: Понедельник, 15.10.2018, 18:21 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
отследить событие программно созданного элемента на форме, надо создавать модуль класса.

Заморочился с модулем класса. Оказалось не так уж и проблемно. Но все таки вопрос остался. Как получить доступ к TextBox(i), активируя Checkbox(i)? Пытался через Controls, по идее на форме уже отображены все Контролы. Но где получить доступ к TextBox, не соображу(((
К сообщению приложен файл: ChkBx.xlsm(26.6 Kb)
 
Ответить
Сообщение
отследить событие программно созданного элемента на форме, надо создавать модуль класса.

Заморочился с модулем класса. Оказалось не так уж и проблемно. Но все таки вопрос остался. Как получить доступ к TextBox(i), активируя Checkbox(i)? Пытался через Controls, по идее на форме уже отображены все Контролы. Но где получить доступ к TextBox, не соображу(((

Автор - Oleg34
Дата добавления - 15.10.2018 в 18:21
Pelena Дата: Понедельник, 15.10.2018, 19:15 | Сообщение № 10
Группа: Админы
Ранг: Местный житель
Сообщений: 13220
Репутация: 2908 ±
Замечаний: ±

Excel 2010, 2016 & Mac Excel
Как получить доступ к TextBox(i), активируя Checkbox(i)
по индексу через созданный массив
К сообщению приложен файл: 2599137.xlsm(29.8 Kb)


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
Сообщение
Как получить доступ к TextBox(i), активируя Checkbox(i)
по индексу через созданный массив

Автор - Pelena
Дата добавления - 15.10.2018 в 19:15
Oleg34 Дата: Вторник, 16.10.2018, 10:21 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
по индексу через созданный массив

Огромное спасибо! Все получилось)))
 
Ответить
Сообщение
по индексу через созданный массив

Огромное спасибо! Все получилось)))

Автор - Oleg34
Дата добавления - 16.10.2018 в 10:21
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как обратиться к динамически созданному массиву CheckBox (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2018 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!