2015-06-23 6 views
2

У меня есть форма доступа с 5 выпадающими списками, мне нужно проверить, уникальны ли значения раскрывающихся списков, прежде чем я одобрю форму. Я могу перебрать все элементы формы, но я хочу, чтобы иметь возможность перебирать только через выпадающие:vba - looping через определенные элементы управления формы

---------------------------------------------------------------------- 
|Id1 [dropdown values] Id2 [Dropdown values] Id3 [Dropdown Values] | 
|                  | 
| CollectionTask [Another dropdown]         |  
| []This is a checkbox            | 
|    [Approve Button] [clear myForm btn]     | 
---------------------------------------------------------------------- 

'iterating over the form elements 
On Error Resume Next 
    Dim ctl As Control 
    For Each ctl In Me.Controls 
     'do something only for dropdown controls of form 
    Next 

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

'this code will do the trick but that means I will have to write a condition for every id 
'which for me is lots of code (not being lazy but I think iterating over the form elements will be more efficient 
If (id1.Value = id2.Value) Or (id1.Value = id3.Value) Or (id1.Value = id4.Value) then 
     Msgbox "make sure you are not duplicating ids" 

End if 

ответ

1

С помощью следующего кода вы можете проверить все элементы управления с ControlType из acComboBox. В основном это просто добавляет значение ComboBox в Dictonary, проверяя каждый раз, чтобы узнать, существует ли значение в Dictonary. Вам просто нужно определить, что вы хотите, если значение уже установлено в другом ComboBox.

Это код, но руки я абсолютно уверен, все правильно:

Private Sub CheckCombos() 
    Dim ctl As Control 
    Dim dict As Variant 

    Set dict = CreateObject("Scripting.Dictionary") 


    For Each ctl In Me.Controls 

     If ctl.ControlType = acComboBox Then 

      If Nz(ctl.Value,"") <> "" Then 

       If dict.Exists(ctl.Value) Then 
        Msgbox "Combobox: " & ctl.Name & " has the same value as: " & dict(ctl.Value) 
       Else 
        dict.Add ctl.Value, ctl.Name 
       End If 

      Else 
       Msgbox "Empty Combobox" 
       'Handle exit 
      End If 

     End If 
    Next 
    End Sub 
Смежные вопросы