Дана форма, на ней два комбобкса :первый - это подразделения,второй - работники. Как сделать чтобы при выборе определенного подразделения выбирался соответствующий работник.
У меня пока выводится весь список работников вне зависимости от подразделения [vba]
Код
Public Sub UserForm_Activate()
If cmbManfac.ListCount <= 0 Then If Not rs Is Nothing Then If rs.State Then rs.Close
cmbManfac.AddItem "*" StrSql = " SELECT DISTINCT usotr.usotr_manfac " & _ " FROM zeie:maxmast.usotr usotr" Set rs = dbdll.rec(client, Forward, StrSql) Do While Not rs.EOF cmbManfac.AddItem Trim(rs!usotr_manfac) DoEvents rs.MoveNext Loop cmbManfac = g_Manfac '-------------------
cmbTabN.AddItem "*" StrSql = " SELECT DISTINCT usotr.usotr_tabnum, usotr.usotr_fio " & _ " FROM zeie:maxmast.usotr usotr" Set rs = dbdll.rec(client, Forward, StrSql) Do While Not rs.EOF cmbTabN.AddItem Trim(rs!usotr_tabnum) & " - " & Trim(rs!usotr_fio) DoEvents rs.MoveNext cmbTabN = g_TabN Loop End If End Sub
[/vba]
Дана форма, на ней два комбобкса :первый - это подразделения,второй - работники. Как сделать чтобы при выборе определенного подразделения выбирался соответствующий работник.
У меня пока выводится весь список работников вне зависимости от подразделения [vba]
Код
Public Sub UserForm_Activate()
If cmbManfac.ListCount <= 0 Then If Not rs Is Nothing Then If rs.State Then rs.Close
cmbManfac.AddItem "*" StrSql = " SELECT DISTINCT usotr.usotr_manfac " & _ " FROM zeie:maxmast.usotr usotr" Set rs = dbdll.rec(client, Forward, StrSql) Do While Not rs.EOF cmbManfac.AddItem Trim(rs!usotr_manfac) DoEvents rs.MoveNext Loop cmbManfac = g_Manfac '-------------------
cmbTabN.AddItem "*" StrSql = " SELECT DISTINCT usotr.usotr_tabnum, usotr.usotr_fio " & _ " FROM zeie:maxmast.usotr usotr" Set rs = dbdll.rec(client, Forward, StrSql) Do While Not rs.EOF cmbTabN.AddItem Trim(rs!usotr_tabnum) & " - " & Trim(rs!usotr_fio) DoEvents rs.MoveNext cmbTabN = g_TabN Loop End If End Sub
Предлагаю в UserForm_Activate формировать только первый комбобокс. На этот комбобокс повесить макрос, срабатывающий при изменениях - и уже в этом макросе происходил бы отбор. При этом в SQL запрос добавить предложение "WHERE", фильтрующее по нужному нам признаку.
ds102061, здравствуйте.
Предлагаю в UserForm_Activate формировать только первый комбобокс. На этот комбобокс повесить макрос, срабатывающий при изменениях - и уже в этом макросе происходил бы отбор. При этом в SQL запрос добавить предложение "WHERE", фильтрующее по нужному нам признаку.Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Private Sub cmbFunc_AfterUpdate() g_Func = Trim(cmbFunc) End Sub Private Sub cmbFunc_Change() g_Func = Trim(cmbFunc) End Sub
Private Sub cmbGRNDate1_AfterUpdate() cmbGRNDate1.Value = form_date(cmbGRNDate1.Value) g_GRNDate1 = Trim(cmbGRNDate1.Value) End Sub
Private Sub cmbGRNDate2_AfterUpdate() cmbGRNDate2.Value = form_date(cmbGRNDate2.Value) g_GRNDate2 = Trim(cmbGRNDate2.Value) End Sub
Private Sub cmbManfac_AfterUpdate() g_Manfac = Trim(cmbManfac) End Sub
Private Sub txtDateFrom_AfterUpdate() txtDateFrom.Value = form_date(txtDateFrom.Value) g_DateFrom = form_date(txtDateFrom.Value) End Sub
Private Sub txtDateTo_AfterUpdate() txtDateTo.Value = form_date(txtDateTo.Value) g_DateTo = form_date(txtDateTo.Value) End Sub
Private Sub cmbCancel_Click() g_Cancel = True Unload Me End Sub
Private Sub cmbOk_Click() Save_params Unload Me End Sub
Private Sub cmbTabN_AfterUpdate() g_TabN = cmbTabN.Value End Sub
Public Sub UserForm_Activate() If cmbManfac.ListCount <= 0 Then If Not rs Is Nothing Then If rs.State Then rs.Close cmbManfac.AddItem "*" StrSql = " SELECT DISTINCT usotr.usotr_manfac " & _ " FROM zeie:maxmast.usotr usotr" Set rs = dbdll.rec(client, Forward, StrSql) With cmbManfac .List = Application.Transpose(rs.GetRows) .AddItem "*", 0 .Value = g_Manfac End With End If '------------- cmbFunc.List = Array("*", "pu10", "pu10", "pu10", "pu12", "nv00", "oe", "nv17", "nv13", _ "nv17", "pv12", "nv15", "oe", "nv00", "nv10", "pv12", "nv12", 0) '------------ g_Func = cmbFunc.Value End Sub Private Sub cmbTabN_Change() FilterFio Array(array("usotr_manfac", g_Manfac)) Application.SendKeys "{right}" End Sub Private Sub cmbTabN_Change() Application.SendKeys "{right}" End Sub Private Sub FilterFio(criteria As Variant) StrSql = " SELECT distinct usotr.usotr_manfac,usotr.usotr_tabnum, " & _ "trim(" & IIf(criteria(1) = "*", "usotr.usotr_manfac&' - '&", "") & _ "usotr.usotr_tabnum&' - '&usotr.usotr_fio) as F1" & _ " FROM zeie:maxmast.usotr usotr order by usotr.usotr_manfac,usotr.usotr_tabnum" Set rs = dbdll.rec(client, Forward, StrSql) rs.Filter = IIf(criteria(1) = "*", 0, criteria(0) & " like '" & criteria(1) & "'") With cmbTabN .List = Application.Transpose(rs.GetRows(-1, 0, 2)) .AddItem "*", 0 .Listindex = 0 End With rs.Close End Sub
[/vba][sub] upd. Исправил небольшую ошибку
ds102061, пробуйте так
[vba]
Код
Dim StrSql As String Dim rs As ADODB.Recordset
Private Sub cmbFunc_AfterUpdate() g_Func = Trim(cmbFunc) End Sub Private Sub cmbFunc_Change() g_Func = Trim(cmbFunc) End Sub
Private Sub cmbGRNDate1_AfterUpdate() cmbGRNDate1.Value = form_date(cmbGRNDate1.Value) g_GRNDate1 = Trim(cmbGRNDate1.Value) End Sub
Private Sub cmbGRNDate2_AfterUpdate() cmbGRNDate2.Value = form_date(cmbGRNDate2.Value) g_GRNDate2 = Trim(cmbGRNDate2.Value) End Sub
Private Sub cmbManfac_AfterUpdate() g_Manfac = Trim(cmbManfac) End Sub
Private Sub txtDateFrom_AfterUpdate() txtDateFrom.Value = form_date(txtDateFrom.Value) g_DateFrom = form_date(txtDateFrom.Value) End Sub
Private Sub txtDateTo_AfterUpdate() txtDateTo.Value = form_date(txtDateTo.Value) g_DateTo = form_date(txtDateTo.Value) End Sub
Private Sub cmbCancel_Click() g_Cancel = True Unload Me End Sub
Private Sub cmbOk_Click() Save_params Unload Me End Sub
Private Sub cmbTabN_AfterUpdate() g_TabN = cmbTabN.Value End Sub
Public Sub UserForm_Activate() If cmbManfac.ListCount <= 0 Then If Not rs Is Nothing Then If rs.State Then rs.Close cmbManfac.AddItem "*" StrSql = " SELECT DISTINCT usotr.usotr_manfac " & _ " FROM zeie:maxmast.usotr usotr" Set rs = dbdll.rec(client, Forward, StrSql) With cmbManfac .List = Application.Transpose(rs.GetRows) .AddItem "*", 0 .Value = g_Manfac End With End If '------------- cmbFunc.List = Array("*", "pu10", "pu10", "pu10", "pu12", "nv00", "oe", "nv17", "nv13", _ "nv17", "pv12", "nv15", "oe", "nv00", "nv10", "pv12", "nv12", 0) '------------ g_Func = cmbFunc.Value End Sub Private Sub cmbTabN_Change() FilterFio Array(array("usotr_manfac", g_Manfac)) Application.SendKeys "{right}" End Sub Private Sub cmbTabN_Change() Application.SendKeys "{right}" End Sub Private Sub FilterFio(criteria As Variant) StrSql = " SELECT distinct usotr.usotr_manfac,usotr.usotr_tabnum, " & _ "trim(" & IIf(criteria(1) = "*", "usotr.usotr_manfac&' - '&", "") & _ "usotr.usotr_tabnum&' - '&usotr.usotr_fio) as F1" & _ " FROM zeie:maxmast.usotr usotr order by usotr.usotr_manfac,usotr.usotr_tabnum" Set rs = dbdll.rec(client, Forward, StrSql) rs.Filter = IIf(criteria(1) = "*", 0, criteria(0) & " like '" & criteria(1) & "'") With cmbTabN .List = Application.Transpose(rs.GetRows(-1, 0, 2)) .AddItem "*", 0 .Listindex = 0 End With rs.Close End Sub
anvg, я думала что пароль убрала, оказывается нет. Но я сама разобралась, спасибо что откликнулись Вот рабочая программа, вдруг кому пригодится
anvg, я думала что пароль убрала, оказывается нет. Но я сама разобралась, спасибо что откликнулись Вот рабочая программа, вдруг кому пригодитсяds102061