Excel 使用锁定时的表单列表框问题 属性
Excel form listbox issue when using locked property
我对列表框在 Excel 表单上的行为方式有疑问。重现问题的步骤:
- 使用一个列表框控件创建用户表单
在此用户表单中使用以下代码:
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
首次显示表单时,我可以使用箭头键和翻页键正常浏览列表框。但是,在触发双击事件后,所有键盘导航都无效,包括切换到其他控件(如果它们在窗体上)。单击列表框似乎确实有效,焦点轮廓显示正确,但在列表框锁定然后解锁后处理焦点的方式有问题。怎么回事?
使用 Office 2013 32 位版本。
我测试过的 2 个解决方案允许您使用箭头键进行导航。
鉴于没有单击事件处理程序,尝试在 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
在 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
我设法重现了这个问题,并在锁定和解锁列表框之前将焦点设置在其他地方对我有用:
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
更改列表框的 sheet 中的缩放比例对我有用。
Private Sub Worksheet_Activate()
Dim temp As Double
Application.ScreenUpdating = False
'Change worksheet zoom setting for the active window
temp = ActiveWindow.Zoom
ActiveWindow.Zoom = temp + 10
ActiveWindow.Zoom = temp
Application.ScreenUpdating = True
End Sub
我对列表框在 Excel 表单上的行为方式有疑问。重现问题的步骤:
- 使用一个列表框控件创建用户表单
在此用户表单中使用以下代码:
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
首次显示表单时,我可以使用箭头键和翻页键正常浏览列表框。但是,在触发双击事件后,所有键盘导航都无效,包括切换到其他控件(如果它们在窗体上)。单击列表框似乎确实有效,焦点轮廓显示正确,但在列表框锁定然后解锁后处理焦点的方式有问题。怎么回事?
使用 Office 2013 32 位版本。
我测试过的 2 个解决方案允许您使用箭头键进行导航。
鉴于没有单击事件处理程序,尝试在 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
在 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
我设法重现了这个问题,并在锁定和解锁列表框之前将焦点设置在其他地方对我有用:
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
更改列表框的 sheet 中的缩放比例对我有用。
Private Sub Worksheet_Activate()
Dim temp As Double
Application.ScreenUpdating = False
'Change worksheet zoom setting for the active window
temp = ActiveWindow.Zoom
ActiveWindow.Zoom = temp + 10
ActiveWindow.Zoom = temp
Application.ScreenUpdating = True
End Sub