如何实时识别哪个文本框处于活动状态?



我有一个关于如何实时获取主动控件名称的问题。以下是详细信息。

我创建了一个允许用户输入记录的表单(请参阅随附的屏幕截图)。通过该表格,用户可以添加2000年安徽省天然气供需数据。 在此处输入图像描述

我想做的一个功能是,当输入某些记录时,例如2000年安徽的天然气"总供应量",表格可以在柱形图中显示2000年(例如1997-1999年)附近安徽的所有天然气"总供应量",以给用户参考。当用户编辑"导入"时,图表将相应地切换到"导入"。

我知道 OnClick() 能够帮助我获取活动文本框的名称,但是框太多了。我想一定还有其他一些简单的方法。而且我也觉得如果我选择不使用 OnClick(),我可能需要另一个线程来捕获活动控件的名称,但似乎 VBA 不支持多个线程?

非常感谢您的帮助!

如果您的目标是避免为每个文本框声明 OnEnter 事件,则可以在加载表单时动态添加事件:

Private Sub Form_Load()
Dim ctl As Control
For Each ctl In Me.Controls
If TypeOf ctl Is Textbox Then
Dim txtbox As Textbox
Set txtbox = ctl
txtbox.OnEnter = "=FieldEntered(""" & txtbox.Name & """)"
End If
Next ctl
End Sub
Public Function FieldEntered(textboxName As String)
Debug.Print textboxName
End Function

然后,您可以使用传递给FieldEntered函数的textboxName参数对图表执行任何操作。

您也可以只在FieldEntered函数中使用Me.ActiveControl.Name而不通过参数传递它,但这主要是美学上的。

注意:要使其正常工作,FieldEntered函数必须是公共函数。

另一种方法是使用 Form 的 Timer 事件,但这会影响性能,因此我认为上述内容更强大。

在表单模块中创建一个函数:

Private Function FieldClicked()
Dim ctl As Control
Set ctl = Me.ActiveControl
Select Case ctl.Name
Case "Field1"
....
Case Else
....
End Select
End Function

在设计模式下选择要分析的所有文本框,On Click属性类型=FieldClicked()。在这种情况下,您无需为每个字段创建 OnClick 事件处理程序 - 只需一个函数,您可以在其中分析所需的任何内容。

顺便说一句,就您的目的而言,最好使用On Enter事件,而不是On Click- 用户可以使用键盘而不是鼠标进入该字段。

最新更新