0

用户正在向组合框的编辑区域输入数据

ComboBox 的 Change Event 用于运行以下代码;

    AppActivate "Microsoft Excel"
        :
    'Do some stuff
        :
    UserForm1.Show
    UserForm1.ComboBox1.SetFocus

这工作正常,但是;即使 ComboBox 现在再次具有焦点(根据 Userform.ActiveControl 无论如何),它没有插入指针来指示这一事实,并且用户必须重新选择 ComboBox 才能继续输入数据

我想要它,以便插入指针重新出现,并且用户可以继续直接输入数据,而不必重新选择组合框

添加以下代码行

    SendKeys "{TAB}+{TAB}{RIGHT}"

是一种解决方案,但它很混乱(它会生成 ComboBox 事件,并且如果可能的话最好避免使用 SendKeys)

任何人都可以提出更好的解决方案吗?

问:为什么黑羊比白羊吃得少?

A. 因为没有那么多

4

3 回答 3

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 时,我还使用这种代码将焦点移到表单上。如果表单没有焦点,则鼠标悬停时不会显示文本气泡...

于 2016-05-22T16:15:37.437 回答
0

在 UserForm 更改事件的末尾添加代码:

Application.OnTime Now + TimeValue("00:00:01"), "GetComboBoxFocus", , True

在模块内添加代码:

Sub GetComboBoxFocus()
    UserForm1.ComboBox1.SetFocus
End Sub

我遇到过几次。由于某种原因,它会在从模块调用时起作用。一秒钟对最终用户来说几乎是不明显的。如果您愿意,您也可以在事件代码的前面添加它,它会等到当前例程完成然后立即运行(1 秒 - 剩余代码所用的时间)。希望这可以帮助。

于 2013-08-27T00:32:22.640 回答
0

UserForm1.ComboBox1.SetFocus

添加

UserForm1.ComboBox1.SelStart = 0 'set the selected text starting position to 0
于 2013-03-15T23:08:54.053 回答