Попробуйте следующее:
Dim ctrl As Control
For Each ctrl In Me.Controls
If ctrl.Tag = "FILL" Then
If Len(ctrl.Value & "") = 0 Then
ctrl.BackColor = vbRed
CheckForEmpty = False
End If
End If
Next ctrl
Когда вы объединяете строку нулевой длины ""
в значение в VBA, оно неявно преобразует это значение в строку, после чего вы можете безопасно проверить длину строки, чтобы определить, введен ли пользователь / выбран значение.
Этот тип сравнения сохраняет шаг в вашей проверке и корректно обрабатывает, когда вы пытаетесь проверить Len()
нулевого значения. Len(Null) = Null
НЕ ноль, поэтому в вашем текущем тесте есть вероятность логической ошибки времени выполнения.
Если элемент управления «пустой» на экране, в зависимости от того, как он связан с полем, он может быть оценен как строка нулевой длины или как ноль, что приведет к различным результатам в вашем Len()
тесте.