Как применить одно и то же событие к ComboBox, динамически создаваемому al oop на разных страницах MultiPage - VBA - PullRequest
0 голосов
/ 11 апреля 2020

Еще одна проблема, с которой я сталкиваюсь сейчас, с моей пользовательской формой и моими классами событий.

У меня есть пользовательская форма, состоящая из MultiPage и двух классов (class1 и class2). Код из моей пользовательской формы создает, щелкнув первую кнопку CommandButton, количество текстовых блоков, равное числу, введенному в текстовый блок на моей первой странице, и новую кнопку CommandButton. Они созданы на первой странице моей MultiPage. Нажав на новую CommandButton, я могу создать новые страницы, равные числу, введенному в моем первом TextBox, и назначить имена, введенные в новых TextBox на новых страницах.

Давайте возьмем в качестве примера, если я введу номер 2 в первом текстовом поле. Нажав на новый CommandButton, я вызываю класс Event (class1), который создает новые страницы, здесь две. На этих двух страницах часть моего кода class1 также позволяет мне создавать новую MultiPage на каждой из этих двух страниц. Более того, на первой странице этого нового MultiPage созданы два ComboBox.

Сейчас я пытаюсь связать два комбинированных списка, чтобы при выборе значения в первом ComboBox во время выполнения моей пользовательской формы значения во втором ComboBox менялись.

Я могу получить эту работу, но только на моей первой странице, созданной динамически с class1. Событие не применяется на второй странице, созданной динамически.

Вот несколько изображений, показывающих мою проблему:

enter image description here enter image description here

Как вы можете видеть, событие применяется только на первой новой странице.

Вот часть кода из моего class1, которая создает новые страницы и поля со списком. В этой части я связал ComboBox с событием из моего class2:

Option Explicit
Public WithEvents CmdEvents As MSForms.CommandButton
Public frm As Object
Dim comboxBoxArray() As New Classe2

Private Sub CmdEvents_Click()

    For i = 1 To nb_blocks 'nb_blocks represents the number entered in the first textbox

        ReDim Preserve comboxBoxArray(1 To nb_blocks)
        Set comboxBoxArray(i).comboBoxEvents = frm.Controls("MP2" + CStr(i)).Pages(0).combobox1 
        Set comboxBoxArray(i).frm2 = frm

        Set combobox1 = Nothing

    Next i

End Sub

Вот часть кода из моего class2, которая связана с class1 для назначения события между ComboBox 1 & 2 на первой странице моего второго MultiPage:

Option Explicit
Public WithEvents comboBoxEvents As MSForms.ComboBox
Public frm2 As Object

Private Sub comboBoxEvents_Change()

    If frm2.combobox1.Text = "Water based fluids" Then

        frm2.combobox2.Clear

        For Each listA_ID In Ws2.Range("FluideEauGlacelf")
            With frm2.Controls("combobox2")
                .AddItem listA_ID.Value
            End With
        Next listA_ID

    ElseIf frm2.combobox1.Text = "Oil fluids" Then

        frm2.combobox2.Clear

        For Each listB_ID In Ws1.Range("FluideHuile")
            With frm2.Controls("combobox2")
                .AddItem listB_ID.Value
            End With
        Next listB_ID

    End If

End Sub

Знаете ли вы, откуда возникла проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...