Как сделать тройной каскадный комбобокс в VBA - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь создать три каскадных выпадающих списка (третий зависит от второго, второй от первого). Я нашел способ создать и заполнить первые два, но я борюсь с третьим. Обратите внимание, что я хочу заполнить их, начиная с трех столбцов заголовками Один, Два, Три.

Я использовал метод, перечисленный здесь https://www.encodedna.com/excel/how-to-create-cascading-combo-box-in-excel-using-vba.htm, который отлично работал для первых двух. Я пытался написать дополнительный саб для третьего выпадающего списка, похожего на второй, но он не работал

Private Sub cmbDue_Change()
    ' THE CHANGE EVENT OF THE SECOND COMBO TO POPULATE THE THIRD COMBO BOX.

    If Trim(cmbDue.Text) <> "" Then

        SetConn     ' SET THE CONNECTION TO THE DATABASE.

        ' SQL QUERY TO FETCH VALUE IN THIRD COLUMN BASED ON THE SELECTED CATEGORY.
        sQuery = "SELECT Three FROM [First$] WHERE " & _
            "Two = '" & cmbDue.Text & "' " & _
            "ORDER BY Three"

        cmbTre.Clear          ' CLEAR THE THIRD COMBOBOX.


        If rs.State = adStateOpen Then
            rs.Close
        End If

        rs.CursorLocation = adUseClient

        ' POPULATE CASCADING COMBO BOX WITH VALUES.
        rs.Open sQuery, myConn, adOpenKeyset, adLockOptimistic
        If rs.RecordCount > 0 Then
            Do While Not rs.EOF
                cmbTre.AddItem rs.Fields(0).Value
                rs.MoveNext
            Loop
        End If
    End If
End Sub

Эта строка не работает:

    rs.Open sQuery, myConn, adOpenKeyset, adLockOptimistic

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

Насколько я понимаю, следует открыть rs.open и набор записей ADODB, состоящий из моей исходной таблицы, содержащей данные, которые были созданы с помощью этого подпункта

Option Explicit

Public myConn As New ADODB.Connection
Public rs As New ADODB.Recordset
Public sQuery As String

' SET A CONNECTION.
Sub SetConn()
    If myConn.State = adStateOpen Then
        myConn.Close
    End If

    Dim sConnString As String
    sConnString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
        "DBQ=" & ActiveWorkbook.Path & Application.PathSeparator & ActiveWorkbook.Name

    myConn.ConnectionString = sConnString
    myConn.Open         ' OPEN THE CONNECTION.
End Sub

«sQuery» должен запускать набор SQL-запросов из предыдущего подпрограммы, чтобы он выполнялся на моей таблице «rs» (набор записей ADODB), тогда как «myConn» должен просто подключаться к набору записей.

Но это не работает.

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