【问题标题】:Prevent cycling with arrow key from processing userform checkbox防止使用箭头键循环处理用户表单复选框
【发布时间】:2019-06-30 05:49:45
【问题描述】:

我为每日考勤日志创建了一个带有一系列复选框的用户表单。

每个必需的与会者都有一个复选框,宏将其转储到 Excel 的日志中。

一切正常,除了使用箭头键在复选框之间移动会导致它们被选中!

使用选项卡循环不会执行此操作。

我注意到它只是在释放箭头键时。

【问题讨论】:

  • AFAIK 箭头键不适用于在表单控件之间导航。 TAB 键是。
  • @MathieuGuindon 谢谢。我想我的问题是 - 我如何创建一个功能强大但不会混淆习惯于使用箭头键导航的用户群(除了我自己)的用户表单?有什么建议吗?
  • 您可以处理每个控件的KeyDown 事件并捕获箭头键(我认为 - 需要测试它),使用下一个/上一个TabIndex 定位控件,和 SetFocus 在该控件上。需要做大量的工作才能最终得到一个在 Windows TBH 中表现得完全不同的表单。
  • 哦,它们是复选框...我认为您无法在这些上处理 keydown .. 嗯

标签: vba


【解决方案1】:

我有同样的问题。以下是我的解决方法:

  • 声明一个公共变量(例如,键盘)
  • 对于用户表单中的每个复选框,为 _KeyUp 创建事件 Subs
  • 在每个 Subs 中,检查是否按下了箭头键之一;如果是这样,转 键盘为真。
  • 创建事件 Subs 来检查keyboard = true,如果是,撤消.value = true .value = false

我使用了一个函数 (arrowModerator) 来处理这一切,因为对于其他复选框,如果 arrowModerator 为真,则会发生其他事情)。这是我的两个复选框的样子:

Public keyboard As Boolean      ‘or Private keyboard as Boolean


Private Sub CB_3_Change()
    Call arrowModerator(Visit2, -1, "3")        ‘Visit2 is the name of my userForm 
End Sub
Private Sub CB_4_Change()
    Call arrowModerator(Visit2, -1, "4")
End Sub


Private Sub CB_3_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Call arrowModerator(Visit2, CInt(KeyCode))
End Sub
Private Sub CB_4_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Call arrowModerator(Visit2, CInt(KeyCode))
End Sub


Public Function arrowModerator(ByRef uForm As UserForm, keyboardInt As Integer, Optional cbString As String)
    If keyboardInt = -1 Then
        If keyboard = True Then
            uForm.Controls("CB_" & cbString).value = False
            keyboard = False
        ElseIf uForm.Controls("CB_" & cbString).value = True Then
            arrowModerator = True
        End If
    ElseIf keyboardInt > 36 And keyboardInt < 41 Then
        keyboard = True
    End If
End Function

当 (formName)_Change、_AfterUpdate、_Exit、_Enter 与 _keyPress、_keyDown 和 _keyUp 绑定时,我发现它们的顺序非常混乱。我发现 _Change 事件发生在 _keyUp 事件之后,所以基本上上面的过程会捕获“更改”(也就是将复选框变为 .value = true)并将其反转。

【讨论】:

    【解决方案2】:
    • 在 VBEditor 中选择用户窗体
    • F4
    • 按类别排序
    • 在“循环”下方找到“已启用”
    • 选择“假”

    【讨论】:

    • 我试过了,但现在它不允许我选择任何复选框,或执行命令按钮。
    • @BenJ。 - 尝试一一查看所有属性,可能会有帮助。最坏的情况,将箭头键绑定到一个空的Sub
    猜你喜欢
    • 2011-09-04
    • 2011-03-13
    • 1970-01-01
    • 2014-11-16
    • 2020-02-20
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多