vba - зацикливание на определенных элементах управления формы
У меня есть форма доступа с примерно 5 выпадающими списками, мне нужно проверить, являются ли значения выпадающих окон уникальными, прежде чем утверждать форму. Я могу выполнять итерации по всем элементам формы, но хочу иметь возможность выполнять итерацию только по выпадающим спискам:
----------------------------------------------------------------------
|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