如果复选框为true,则Keydown上的VBA SetFocus无法正常工作?

时间:2018-02-12 16:35:00

标签: excel vba excel-vba

我在excel中有以下表格。它是简单清单工作表的一部分,用于更新项目的状态。它按预期运行,但是当我尝试添加一个复选框以使所选状态保持不变时(允许我每次使用一批项目时只输入序列而不是串行和状态)我注意到焦点在向前提交循环之后,就好像我按Tab键而不是我用SetFocus设置它。

我认为这是与KeyDown的事件周期或嵌套的If / Else逻辑相关的疏忽,但我实际上没有运气诊断它。我最近才开始使用VBA,我想要了解很多怪癖。

Private Sub clear()
    Me.txtSerial = ""
    If cbPersist.Object.Value = False Then
        Me.cboxStatus = ""
        Me.cboxStatus.SetFocus
    Else
        Me.txtSerial.SetFocus
    End If
End Sub

Private Sub submit()
    Dim loc As Range
    Dim ws As Worksheet
    Set ws = Worksheets("Full Inventory")
    Set loc = ws.Columns("B").Find(what:=Me.txtSerial.Value, LookIn:=xlValues, lookat:=xlWhole)
    If Not loc Is Nothing Then
        ActiveWindow.ScrollRow = loc.Row
        ws.Cells(loc.Row, 10).Value = Me.cboxStatus.Value
    Else
        MsgBox "Serial not found."
    End If
    clear
End Sub

Private Sub txtSerial_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyReturn Then
        submit
    ElseIf KeyCode = vbKeyEscape Then
        clear
    End If
End Sub

Private Sub UserForm_Initialize()
    cboxStatus.List = Array("Stock", "Shipped", "Research", "Sent Back", "Return")
End Sub

1 个答案:

答案 0 :(得分:0)

建议如下:

UserForm模块的代码段

Private Sub txtSerial_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = vbKeyReturn Then
    submit
    KeyCode = vbKeyPageDown     ' << modify Enter key value to prevent from tab hopping
  ElseIf KeyCode = vbKeyEscape Then
    clear
  End If
End Sub