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

Вход

Регистрация

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

 

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

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир 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
Группа: Проверенные
Ранг: Обитатель
Сообщений: 444
Репутация: 122 ±
Замечаний: 0% ±

Excel 1997
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
Группа: Админы
Ранг: Местный житель
Сообщений: 19160
Репутация: 4412 ±
Замечаний: ±

Excel 365 & 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]


"Черт возьми, Холмс! Но как??!!"
Ю-money 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
Группа: Проверенные
Ранг: Обитатель
Сообщений: 444
Репутация: 122 ±
Замечаний: 0% ±

Excel 1997
[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
Группа: Админы
Ранг: Местный житель
Сообщений: 19160
Репутация: 4412 ±
Замечаний: ±

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

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


"Черт возьми, Холмс! Но как??!!"
Ю-money 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
Группа: Админы
Ранг: Местный житель
Сообщений: 19160
Репутация: 4412 ±
Замечаний: ±

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


"Черт возьми, Холмс! Но как??!!"
Ю-money 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-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!