用户正在将数据输入到ComboBox的编辑区域
ComboBox的Change Event用于运行以下代码;
AppActivate "Microsoft Excel"
:
'Do some stuff
:
UserForm1.Show
UserForm1.ComboBox1.SetFocus
这可行,但是;即使ComboBox现在再次拥有Focus(无论如何根据Userform.ActiveControl),它没有插入指针来指示这一事实,并且用户必须重新选择ComboBox才能继续输入数据
我想拥有它以便插入指针重新出现,用户可以直接继续输入数据,而无需重新选择ComboBox
添加以下代码行
SendKeys "{TAB}+{TAB}{RIGHT}"
是一个解决方案,但它很混乱(它会生成ComboBox事件,如果可能的话,最好避免使用SendKeys)
有人能提出更好的解决方案吗?
Q值。黑羊为什么吃不到白羊?
一个。因为没有那么多
答案 0 :(得分:1)
问题是,用户表单本身可能没有焦点在工作表或其他用户表单上。
试试这段代码:
with UserForm1.ComboBox1
.Visible = False
.Visible = True
.setfocus
end with
或更一般地设置正确的焦点,调用此子:
Sub Focus_ControlOfUserForm(ByRef Obj As Object) 'from the Userform, call Focus_ControlOfUserForm(Me)
Dim ctl As Control
With Obj
Set ctl = .ActiveControl
If TypeName(ctl) = "MultiPage" Or TypeName(ctl) = "Frame" Then
Set ctl = ctl.SelectedItem.ActiveControl.Name
End If
With ctl
Dim Af As Boolean
With Application
Af = .ScreenUpdating
.ScreenUpdating = False
End With
'.SetFocus
.Visible = False
.Visible = True
.SetFocus
If Af Then Application.ScreenUpdating = True
End With
End With
End Sub
当我需要在悬停时显示ControlTipText时,我也使用这种代码将焦点移动到Form。如果表单没有焦点,则文本气泡不会在鼠标悬停时显示...
答案 1 :(得分:0)
之后
UserForm1.ComboBox1.SetFocus
添加
UserForm1.ComboBox1.SelStart = 0 'set the selected text starting position to 0
答案 2 :(得分:0)
在UserForm Change Event结束时添加代码:
Application.OnTime Now + TimeValue("00:00:01"), "GetComboBoxFocus", , True
在模块内添加代码:
Sub GetComboBoxFocus()
UserForm1.ComboBox1.SetFocus
End Sub
我已经碰到过好几次了。出于某种原因,从模块调用时它将起作用。一秒钟对最终用户来说几乎不可察觉。如果您愿意,也可以在事件代码中添加它,它将等到当前例程完成后立即运行(1秒 - 剩余代码所用的时间)。希望这会有所帮助。