我有一个关于如何实时获取主动控件名称的问题。以下是详细信息。
我创建了一个表单,允许用户输入记录(请参见随附的截图)。通过这种形式,用户可以在2000年增加安徽省的天然气供需数据。 enter image description here
我想做的一个功能是输入某些记录,例如2000年安徽天然气“总供应量”表格可以显示所有安徽天然气“总供应量”近2000年,比如1997-1999,在柱形图中给予用户参考。当用户编辑“导入”时,图表将相应地切换为“导入”。
我知道OnClick()能够帮助我获取活动文本框的名称,但是框太多了。我想还有其他一些简单的方法。如果我选择不使用OnClick(),我也觉得我可能需要另一个线程来捕获活动控件的名称,但VBA中似乎不支持多个线程?
非常感谢您的帮助!
答案 0 :(得分:0)
在表单模块中创建一个函数:
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
- 用户可以使用键盘输入字段,而不是鼠标。
答案 1 :(得分:0)
如果您的目标是避免为每个文本框声明一个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
然后,您可以使用传递给textboxName
函数的FieldEntered
参数对图表执行任何操作。
你也可以在Me.ActiveControl.Name
函数中使用FieldEntered
,而不是通过参数传递它,但这主要是美学。
注意:为此,FieldEntered
函数必须是公共函数。
另一种方法是使用Form的Timer事件,但这会影响性能,所以我认为上面的内容更强大。