Очистка пользовательской формы, выдающая ошибку 1004 из-за динамического выпадающего списка - PullRequest
1 голос
/ 28 июня 2019

Я работаю над базой данных жалоб клиентов для своей работы и хочу внедрить пользовательскую форму, чтобы упростить ввод данных для сотрудников офиса.Я только начинаю, но уже столкнулся с ошибкой, которую не могу понять, как исправить или обойти.

У меня есть кнопка для очистки пользовательской формы.Однако, когда я нажимаю кнопку, она очищает всю форму за исключением для ComboBox2, результаты которого зависят от выбора из ComboBox1.Я получаю ошибку 1004 во время выполнения, которая вызывает функцию Match, которую я использовал для ComboBox2.Код ниже.Кто-нибудь может помочь мне с этим?Спасибо!

Private Sub CommandButton2_Click()
    Clear_Form
End Sub
Sub Clear_Form()
    Me.ComboBox2.Clear
    For Each ctl In Me.Controls
        Select Case TypeName(ctl)
            Case "TextBox"
                ctl.Text = ""
            Case "ComboBox"
                ctl.ListIndex = -1

        End Select
    Next ctl
End Sub
Private Sub UserForm_Activate()
    Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("Customer")

    Dim i As Integer
    Me.ComboBox1.Clear
    For i = 1 To Application.WorksheetFunction.CountA(sh.Range("1:1"))
        Me.ComboBox1.AddItem sh.Cells(1, i).Value

    Next i
End Sub
Private Sub ComboBox1_Change()
    Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("Customer")
    Dim i As Integer
    Dim n As Integer

    n = Application.WorksheetFunction.Match(Me.ComboBox1.Value, sh.Range("1:1"), 0)
    Me.ComboBox2.Clear
    For i = 2 To Application.WorksheetFunction.CountA(sh.Cells(1, n).EntireColumn)
        Me.ComboBox2.AddItem sh.Cells(i, n).Value
    Next i
End Sub

1 Ответ

1 голос
/ 28 июня 2019

Вы получите ошибку, потому что Clear_Form очищает комбинированный список, который, в свою очередь, вызывает событие _Change, и Match завершается ошибкой, потому что в комбинированном списке нет значения.Просто добавьте одну строку к событию _Change.

Private Sub ComboBox1_Change()
    If ComboBox1.ListIndex = -1 Then Exit Sub '<~~ ADD THIS

    Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("Customer")
    Dim i As Integer
    Dim n As Integer

    n = Application.WorksheetFunction.Match(Me.ComboBox1.Value, sh.Range("1:1"), 0)

    Me.ComboBox2.Clear

    For i = 2 To Application.WorksheetFunction.CountA(sh.Cells(1, n).EntireColumn)
        Me.ComboBox2.AddItem sh.Cells(i, n).Value
    Next i
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...