重新关注Excel Userform ComboBox

时间:2013-03-15 21:46:44

标签: excel vba controls focus userform

用户正在将数据输入到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值。黑羊为什么吃不到白羊?

一个。因为没有那么多

3 个答案:

答案 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秒 - 剩余代码所用的时间)。希望这会有所帮助。