Доступ: отключить списки - PullRequest
       1

Доступ: отключить списки

0 голосов
/ 28 декабря 2018

У меня есть 5 комбинированных списков в моей форме, и я хотел бы, чтобы пользователь мог выбрать только 2. После выбора 2 остальные 3 будут отключены?Как я пошел об этом?Я знаю, что вы можете сделать один комбинированный список и отключить остальные, обновив их, как показано ниже.Ценю твою помощь!:)

Private Sub cboOR_AfterUpdate()
Me.cboA.Enabled = False
End Sub

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Проверьте это

Private Sub Combo0_AfterUpdate()
    If CheckCombo Then
        disableCombo
    Else
        enableCombo
    End If
End Sub



Private Sub Combo10_AfterUpdate()
  If CheckCombo Then
        disableCombo
    Else
        enableCombo
    End If
End Sub

Private Sub Combo12_AfterUpdate()
  If CheckCombo Then
        disableCombo
    Else
        enableCombo
    End If
End Sub

Private Sub Combo14_AfterUpdate()
  If CheckCombo Then
        disableCombo
    Else
        enableCombo
    End If
End Sub

Private Sub Combo16_AfterUpdate()
  If CheckCombo Then
        disableCombo
    Else
        enableCombo
    End If
End Sub


Private Function CheckCombo() As Boolean

  Dim retVal As Long
  retVal = IIf(Len(Nz(Combo0, "")) > 0, 1, 0) + IIf(Len(Nz(Combo10, "")) > 0, 1, 0) + IIf(Len(Nz(Combo12, "")) > 0, 1, 0) + IIf(Len(Nz(Combo14, "")) > 0, 1, 0) + IIf(Len(Nz(Combo16, "")) > 0, 1, 0)
  CheckCombo = (retVal >= 2)

End Function

Private Sub enableCombo()
    Combo0.Enabled = True
    Combo10.Enabled = True
    Combo12.Enabled = True
    Combo14.Enabled = True
    Combo16.Enabled = True
End Sub

Private Sub disableCombo()
    If Len(Nz(Combo0, "")) <= 0 Then Combo0.Enabled = False
    If Len(Nz(Combo10, "")) <= 0 Then Combo10.Enabled = False
    If Len(Nz(Combo12, "")) <= 0 Then Combo12.Enabled = False
    If Len(Nz(Combo14, "")) <= 0 Then Combo14.Enabled = False
    If Len(Nz(Combo16, "")) <= 0 Then Combo16.Enabled = False
End Sub
0 голосов
/ 28 декабря 2018

Поместите этот Sub в модуль формы

Private Sub changeStateOfCB()

    Dim nameChB() As String
    Dim cMax As Long
    Dim ctrl As Control
    Dim cValued As Long
    Dim nameCurr As Variant

    ' names of CB
    nameChB = Split("ComboName1#ComboName2#ComboName3#ComboName4#ComboName5", "#")
    ' max allowed values
    cMax = 2

    ' counting with values
    For Each nameCurr In nameChB
        If Not Me.Controls(nameCurr).Value Is Null Then
            cValued = cValued + 1
        End If
    Next
    ' disabling if needed
    For Each nameCurr In nameChB
        If Not Me.Controls(nameCurr).Value Is Null Then
            Me.Controls(nameCurr).Enabled = (cValued < cMax)
        End If
    Next

End Sub

Измените имена в строке в соответствии с вашими именами в строке nameChB.И для каждого поля со списком создайте AfterUpdate процедуры событий с вызовом

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