我创建的用户表单上有一个烦人的问题,代码很长。尽管文本框处于活动状态,但它不想在文本框中显示闪烁的光标。
所以,我关闭了 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。
我的问题:
另外,在 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 内闪烁的光标。
尝试将您的用户表单初始化调整为:
Private Sub UserForm_Initialize()
tb.Enabled = True 'or TextBox1.Enabled = True
btn_Click
End Sub