尽管文本框处于活动状态,但 Excel VBA 文本框用户窗体不会在文本框中显示闪烁的光标

问题描述 投票:0回答:1

我创建的用户表单上有一个烦人的问题,代码很长。尽管文本框处于活动状态,但它不想在文本框中显示闪烁的光标。

所以,我关闭了 Excel 应用程序。
打开Excel App,默认有一个空白工作簿Book1
在常规模块中创建子模块:

Sub ShowFrmTest()
frmTest.Show vbModeless
End Sub

然后创建一个用户表单“frmTest”,其中包含一个文本框“tb”和一个按钮“btn”。
在用户表单模块内,我有如下所示:

Private Sub UserForm_Initialize()
btn_Click
End Sub

Private Sub btn_Click()
'style-X
tb.SetFocus
Debug.Print ActiveControl.Name
End Sub

然后我运行 ShowFrmTest 子程序。
结果-A
debug.print结果显示“tb”。
所以, tb 处于活动状态,但我不明白为什么它没有在 tb 内显示闪烁的光标。

所以,我尝试像这样的 btn_Click 子:

Private Sub UserForm_Initialize()
btn_Click
End Sub

Private Sub btn_Click()
'style-Y
btn.SetFocus
Debug.Print ActiveControl.Name
End Sub

然后我运行 ShowFrmTest 子程序。
结果-B
debug.print结果显示“btn”,
并且 btn 处于活动状态,因为我看到该按钮有一个阴影。

接下来,我尝试像下面的 btn_Click sub:

Private Sub UserForm_Initialize()
btn_Click
End Sub

Private Sub btn_Click()
'style-Z
btn.SetFocus
tb.SetFocus
Debug.Print ActiveControl.Name
End Sub

然后我运行 ShowFrmTest 子程序,得到与结果 A 相同的结果。

接下来我尝试在 uf_init 子组件中使用 X、Y 和 Z 样式,然后删除 btn_Click 子组件。
然后我运行 ShowFrmTest 子程序。
与 btn_Click 内的 X、Y 和 Z 发生相同的结果。

接下来,我做如下:

Private Sub UserForm_Initialize()
btn_Click
End Sub

Private Sub UserForm_Activate()
tb.SetFocus
Debug.Print ActiveControl.Name
End Sub

Private Sub btn_Click()
tb.SetFocus
End Sub

然后我运行 ShowFrmTest 子程序。
与结果 A 相同的结果。

但是.... 如果 UserForm_Activate 如下所示:

Private Sub UserForm_Activate()
'style-Final
btn.SetFocus
tb.SetFocus
Debug.Print ActiveControl.Name
End Sub

运行 ShowFrmTest 子程序后,
终于可以得到想要的结果了
debug.print结果显示“tb”,
并且 tb 处于焦点位置,因为我可以看到 tb 内闪烁的光标。

我的Excel版本是2010。

我的问题:

  • A.我的 Excel 应用程序是否已损坏?这就是为什么如果代码是以 X 或 Z 样式编写的,它不会在 tb 内显示闪烁的光标?
  • B.如果我的 Excel 应用程序没有损坏,为什么 Excel 会出现这样的情况? tb 处于活动状态,但如果代码以 X 或 Z 样式编写(在 tb_click sub 中或仅在没有 tb_click sub 的 uf_init 中),则 tb 中不存在闪烁的光标。这背后有什么逻辑吗?
  • C.是否有我错过的 tb 属性设置?这就是为什么它会有这样的行为。

另外,在 style-Final 中...为什么需要先 btn.setfocus 然后 tb.setfocus 才能看到 tb 中闪烁的光标?

任何形式的回应将不胜感激。
提前致谢。


刚才我尝试过如下:

Sub ShowFrmTest()
'sub in regular module which i run
frmTest.Show vbModeless
Debug.Print frmTest.ActiveControl.Name
frmTest.tb.SetFocus
End Sub

Private Sub UserForm_Initialize()
'sub in uf module
btn_Click
End Sub

Private Sub btn_Click()
'sub in uf module
tb.SetFocus
End Sub

因为我想“哦...也许btn_click中的tb.setfocus在用户表单显示在页面上之前无法应用”,所以我编写了如上面的代码。尽管 debug.print 结果显示“tb”是活动控件名称,但我仍然没有看到 tb 内闪烁的光标。

excel vba excel-2010 userform setfocus
1个回答
0
投票

尝试将您的用户表单初始化调整为:

Private Sub UserForm_Initialize()
tb.Enabled = True 'or TextBox1.Enabled = True
btn_Click
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.