我有一些使用ActiveControl属性的Access VBA代码。如果碰巧没有焦点控制,那将引发错误。如果总是有[[could具有焦点的可见控件,我是否需要担心?也就是说,在总是有控件可以具有焦点的形式中,无控件有什么方法可以具有焦点吗?
我看到其他有关某些相关问题的文章。它们似乎表明,唯一的方法(如果我想使用VBA来防止任何控件具有焦点)将焦点设置为某些物理上隐藏的(但visible = True)控件。这意味着没有控制无法集中注意力。但是我想明确地问这个问题。但是,如果没有控件(因为3年后,某人决定存在必须禁用所有控件的情况)或意外控件(即某人,则应该练习防御性编程,不要让代码崩溃。稍后添加)是活动的。
“如果使用ActiveControl属性时没有控件具有焦点,或者隐藏或禁用了所有活动窗体的控件,则会发生错误。”
这是一个简单且常见的情况。创建一个带有按钮和标签的简单启动画面。我已经将它设置为Pop Up和Modal,但是对于我们的测试来说,这两个设置似乎都不重要。
下一步,即使后面有以下代码,也要创建一个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
现在,通过从LOAD()或CURRENT()事件下的Screen.ActiveControl
或form.ActiveControl
语句中删除注释标记来测试“ ActiveControl”属性。即使我设置了标签的标题,也没有使其成为活动控件。同样,给窗体本身以焦点或设置
Form.Visible = True
都不足以激活控件:无论您尝试通过Screen.ActiveControl
或Form.ActiveControl
哪种方式访问属性,您仍然会收到错误2474:我尝试过,但是无法在事件子程序本身或
FORM_ERROR()
事件中捕获此错误。因此,这是一个非常常见的情况-启动画面-此处没有活动控件。您也许可以通过测试具有焦点的控件来解决它,这取决于您要完成的工作。