使用locking属性时Excel表单列表框问题

我有问题的方式列表框的行为在Excel表单上。 重现问题的步骤:

  • 用一个列表框控件创build一个用户窗体
  • 使用此用户表单使用以下代码:

    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Me.ListBox1.Locked = True Me.ListBox1.Locked = False End Sub Private Sub UserForm_Initialize() Dim i As Integer For i = 1 To 10 Me.ListBox1.AddItem i Next i End Sub 

首先显示表单时,我可以使用箭头键和页面键正常浏览列表框。 但是,在双击事件触发后,所有键盘导航都不起作用,包括对其他控件(如果它们在表单上)的Tab键。 单击列表框似乎工作,焦点大纲显示正确,但是在列表框被locking,然后解锁之后处理焦点的方式有些问题。 到底是怎么回事?

使用Office 2013 32位版本。

我设法复制这个问题,并在locking和解锁列表框的工作之前设置其他地方的焦点:

 Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Me.TextBox1.SetFocus 'or some other control. Me.ListBox1.Locked = True Me.ListBox1.Locked = False Me.ListBox1.SetFocus End Sub 

我testing过的2个解决scheme允许您使用箭头键导航。

  1. 鉴于没有一个单击事件处理程序,请尝试在DblClick(始终工作)之后调用单击事件:

     Private Sub ListBox1_Click() Debug.Print "ListBox1_Click()" End Sub Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Debug.Print "ListBox1_DblClick()" With Me.ListBox1 .Locked = True .Locked = False End With ListBox1_Click End Sub Private Sub UserForm_Initialize() Dim i As Integer For i = 1 To 10 Me.ListBox1.AddItem i Next i End Sub 
  2. 在DblClick的末尾设置Cancel = False 。 (有时不起作用!)

     Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Debug.Print "ListBox1_DblClick()" With Me.ListBox1 .Locked = True .Locked = False End With Cancel = False End Sub Private Sub UserForm_Initialize() Dim i As Integer For i = 1 To 10 Me.ListBox1.AddItem i Next i End Sub