Я пытаюсь создать три каскадных выпадающих списка (третий зависит от второго, второй от первого). Я нашел способ создать и заполнить первые два, но я борюсь с третьим. Обратите внимание, что я хочу заполнить их, начиная с трех столбцов заголовками Один, Два, Три.
Я использовал метод, перечисленный здесь 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» должен просто подключаться к набору записей.
Но это не работает.