Вы можете определенно иметь активную форму с видимыми и включенными элементами управления, которая имеет фокус, но не имеет активного элемента управления.В документации для form.ActiveControl и screen.ActiveControl упоминается: "Если ни один элемент управления не имеет фокуса при использовании свойства ActiveControl или если все активные формыэлементы управления скрыты или отключены, возникает ошибка. "
Вот простой и распространенный случай.Создайте простой экран-заставку с кнопкой и надписью.Я сделал это как Всплывающее и Модальное , но ни одна из настроек не имеет значения для нашего теста.
Далее создайте событие FORM_LOAD()
и FORM_CURRENT()
даже со следующим кодом:
Private Sub Form_Current()
' Debug.Print Screen.ActiveControl.Name
' Debug.Print Me.ActiveControl.Name
End Sub
Private Sub Form_Load()
On Err GoTo PrintError
' Me.SetFocus
Me.lbSample.Caption = "Welcome to my Application"
' Debug.Print Form.ActiveControl.Name
' Debug.Print Screen.ActiveControl.Name
ExitHere:
Exit Sub
PrintError:
Debug.Print Err.Description & " (" & Err.Number & ")"
GoTo ExitHere
End Sub
Теперь протестируйте свойство ActiveControl, удалив отметку комментария изоператоры Screen.ActiveControl
или form.ActiveControl
в событиях LOAD () или CURRENT ().
Несмотря на то, что я устанавливаю заголовок ярлыка, он не делает его активным элементом управления.Кроме того, для активации элемента управления не нужно указывать фокус формы или значение Form.Visible = True
: независимо от того, каким образом вы пытаетесь получить доступ к свойству, через Screen.ActiveControl
или Form.ActiveControl
, вы все равно получите ошибку 2474:
Я пытался, но не смог отловить эту ошибку ни в самой подпрограмме, ни в событии FORM_ERROR()
.
Итак, вот довольно распространенный случай - заставка - где нет активного контроля.Возможно, вам удастся обойти его, протестировав вместо этого элемент управления с фокусом, это зависит от того, чего вы пытаетесь достичь.