Есть некая функция, которая вызывается при нажатии на кнопку или надпись, на время выполнения этой функции кнопку надо блокировать.
Делаю так:
strAForm = Screen.ActiveForm.Name
'Отбрасываем ситуацию, когда вызов текущей функции осуществляется так, что блокировать ЭУ нельзя, например вызов производится из кода
Dim flgDsbl As Boolean
flgDsbl = True
If frmName = frmNameP Then
If Not IsMissing(frmNameIn) Then
If frmName = CStr(frmNameIn) Then flgDsbl = False
End If
End If
If flgDsbl Then
If Screen.ActiveControl.Name <> "" Then
'Переводим фокус ввода и блокируем элемент управления
strActiveControl = Screen.ActiveControl.Name
SendKeys "({Tab})", True
Forms(strAForm).Controls(strActiveControl).Enabled = False
flgACEnabled = True
'Теперь на кнопку фокус ввода установить нельзя, так что теперь можно смело выставлять Enabled=True не опасаясь получится в фокусе
End If
End If
Но проблема в том, что на форме в этой области может быть всего одна лишь кнопка или надпись и перевести фокус по табу не на что, соответственно фокус остается на этой кнопке и вываливается ошибка. Форм очень много, больше 100, проверять все вручную и добавлять скрытые контролы затруднительно, как можно обработать ошибку невозможности Forms(strAForm).Controls(strActiveControl).Enabled = False и выставить флаг в flgACEnabled = false
??