【发布时间】:2016-05-27 04:19:29
【问题描述】:
我已经复制并稍微修改了this post 底部的代码,以允许在我创建的工作表表单上的表单控件之间切换。这是与 KeyCode = vbKeyEnter 相关的部分:
Select Case KeyCode
Case vbKeyTab
Dim Backward As Boolean
Backward = (Shift And fmShiftMask)
Call MoveFocus(Cntrl:=Cntrl, TabIndex:=TabIndex, Backward:=Backward)
Case vbKeyEnter
Select Case TypeName(Cntrl)
Case TxtBoxType
If Not (Cntrl.EnterKeyBehavior And Cntrl.MultiLine) Then
Call MoveFocus(Cntrl:=Cntrl, TabIndex:=TabIndex)
End If
Case Else
On Error Resume Next
Application.Run Sheet1.CodeName & "." & Cntrl.name & "_Click"
On Error GoTo 0
End Select
End Select
该代码适用于在控件之间向前和向后切换。但是,我在使用回车键检查和取消选中复选框控件时遇到了麻烦。它适用于选项按钮,但不适用于复选框。如果我将CheckBox1.Value = True 添加到 CheckBox1_Click 事件中,它可以检查它是否为真,但自然不会允许它取消选中为假。我尝试添加以下 IF 语句以根据当前值将其设置为 true 或 false,但没有任何反应。
If CheckBox1.Value = True Then
CheckBox1.Value = False
Else
CheckBox1.Value = True
End If
另一个注意事项:当我按 Enter 并且表单控件没有任何反应时,它会将活动单元格向下移动到活动列。有什么建议吗?
【问题讨论】:
-
空格键一直是切换复选框的公认方法。为什么要重写 Windows GUI 系统?
-
我想我不知道空格键是复选框切换(此时仍然有点绿色)。此外,我正在为请求创建表单的人 - 在数字键盘上使用左手制表键和右手键数字/输入。我会确保空格键对我有用,并询问这对他来说是否足够。如果没有,有没有办法让它与 enter 一起工作?感谢 Jeeped 的帮助。
-
If KeyCode = 13 Then CheckBox1.Value = Not CheckBox1.Value按要求工作... -
在我看来,构建一个用户表单来处理这个数据输入任务会容易得多。