Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何在基于多页的表单上动态标识当前控件_Excel_Vba_Forms - Fatal编程技术网

Excel 如何在基于多页的表单上动态标识当前控件

Excel 如何在基于多页的表单上动态标识当前控件,excel,vba,forms,Excel,Vba,Forms,因此,我试图实现的是每次选择新字段(或获得焦点)时在文本框中显示帮助文本。我正在使用Excel 2013,我的表单有多个选项卡(多页表单) 到目前为止,我知道这是可能的:每次选择一个字段时,我都可以使用其中一个事件(即单击)来更新“帮助”文本框中的帮助文本(仅供参考,帮助文本保存在工作表上,每个字段都有一个标记。我使用此标记从工作表中提取帮助文本)。我不知道(或在网上找不到)如何动态执行此操作:因此,当一个新字段获得焦点时,可能有一个表单事件可用于获取ActiveControl并将其传递给我的s

因此,我试图实现的是每次选择新字段(或获得焦点)时在文本框中显示帮助文本。我正在使用Excel 2013,我的
表单
有多个选项卡(多页表单)

到目前为止,我知道这是可能的:每次选择一个字段时,我都可以使用其中一个事件(即单击)来更新“帮助”文本框中的帮助文本(仅供参考,帮助文本保存在工作表上,每个字段都有一个标记。我使用此标记从工作表中提取帮助文本)。我不知道(或在网上找不到)如何动态执行此操作:因此,当一个新字段获得焦点时,可能有一个表单事件可用于获取
ActiveControl
并将其传递给我的sub?(这将调出帮助文本)

我已尝试使用
Myform。单击
(和
多页。单击
)事件,但当我单击新字段或新字段的选项卡时,该事件不起作用

如果我能提供更多信息,请告诉我


非常感谢您的帮助

除非我误解了您的需要,为什么不做这样的事情呢

Private Sub TextBox1_Enter()
   UpdateHelp TextBox1
End Sub

Private Sub TextBox2_Enter()
   UpdateHelp TextBox2
End Sub

Private Sub TextBox3_Enter()
   UpdateHelp TextBox3
End Sub

Private Sub TextBox5_Enter()
   UpdateHelp TextBox5  'this is on a multipage control
End Sub

Private Sub TextBox6_Enter()
   UpdateHelp TextBox6  'this is on a multipage control
End Sub

Private Sub UpdateHelp(ByRef c As Control)
   TextBox4.Text = c.Name
End Sub

您可以传递
ActiveControl
,但对于多页控件上的控件,
ActiveControl
是父控件,而不是文本框。

尝试使用
Enter
事件。@BrianMStafford:刚刚尝试过,但不幸的是,它的行为与
Click
事件类似。。如果我真的点击了标签上的任何地方,我会得到一些东西,但是当我改变了标签上的字段时,我不会得到。谢谢你的回复,但这正是我试图避免的。这种方法意味着每次向表单中添加字段时,我都必须为该字段添加对
Enter
事件的调用。如果每次改变场焦点时我都能动态地获得活动场,我就不必这样做了。我将能够在触发时捕获更改,并将
ActiveObject
发送到
UpdateHelp
UDF。有什么想法吗?我不确定有没有直接的方法。我会尝试一些方法,如果我发现了什么,我会更新这个答案。那将是非常棒的朋友。我也在努力。如果我找到了解决方案,我也会把它贴在这里