Vba Excel用户表单文本框常量设置焦点

Vba Excel用户表单文本框常量设置焦点,vba,excel,listbox,userform,Vba,Excel,Listbox,Userform,首先,我要感谢你们所有人。也许你没有注意到,但你帮助我从零开始掌握VBA到了某种程度。我还在学习过程中,所以我可能错过了一些非常简单的东西,请温柔:) 首先,我想提供一个关于我的问题的小背景更新。我一直在写一个小程序来扫描我的工作,能够保持库存状态的来料部分。该程序的最新外观如下所示: 照片上的数字是我最近做的噩梦: 1。扫描零件号:这是扫描仪输入值的文本框。收到输入后,我立即将该数据转换为变量,并清除文本框值,如下所示: Private Sub PN_CurrentScan_KeyDown(

首先,我要感谢你们所有人。也许你没有注意到,但你帮助我从零开始掌握VBA到了某种程度。我还在学习过程中,所以我可能错过了一些非常简单的东西,请温柔:)

首先,我想提供一个关于我的问题的小背景更新。我一直在写一个小程序来扫描我的工作,能够保持库存状态的来料部分。该程序的最新外观如下所示:

照片上的数字是我最近做的噩梦:

1。扫描零件号:这是扫描仪输入值的文本框。收到输入后,我立即将该数据转换为变量,并清除文本框值,如下所示:

Private Sub PN_CurrentScan_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then
        EnteredPN = Replace(PN_CurrentScan.Value, Chr(32), "", 1) '<---PN_CurrentScan is the name of text box
        EnteredPN = Left(EnteredPN, 12)
        PN_CurrentScan.Value = ""
  • 为所有按钮单击添加了setfocus属性:

    Me.PN_CurrentScan.SetFocus
    
  • 将setfocus属性添加到列表框单击:

    Private Sub CurrentStatus_List_Click()
        Me.PN_CurrentScan.SetFocus
    End Sub
    
  • 添加了设置焦点以进入和退出listbox的事件,但这不起作用:

    Private Sub CurrentStatus_List_Enter()
    Me.PN_CurrentScan.SetFocus
    End Sub
    
    Private Sub CurrentStatus_List_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Me.PN_CurrentScan.SetFocus
    End Sub
    
  • 因此,通过所有这些应对措施,我已经设法改进到了某个程度,唯一剩下的问题是当我单击列表框旁边的滚动条时,文本框失去焦点,如果不单击文本框,我无法再次设置焦点。我用listbox尝试了所有事件,但没有一个成功。有没有办法解决这个问题,或者我需要处理这个问题?提前感谢您的支持

    解决方案:

    多亏了@Rory,我们终于解决了我的问题。正如他在下面的回答中注意到并解释的那样,我的文本框和列表框都在框架中。我尝试了几个设置焦点选项,但我总是将焦点放在文本框上。但是,解决方案是将焦点放在包含目标文本框的框架上:

        Private Sub CurrentStatus_Frame_Enter() '<-- Enter event of the frame which contains listbox
            Me.PN_CurrentScan.SetFocus '<-- Setfocus to target textbox
            Me.Scanned_Frame.SetFocus '<-- Setfocus to frame which contains target textbox
        End Sub
    

    Private Sub-CurrentStatus\u Frame\u Enter()”注意到两个控件都位于容器框架控件内,您可以使用包含列表框的框架的
    Enter
    事件将焦点设置为包含文本框的框架,而不是文本框本身。

    尝试使用
    Enter
    事件将焦点设置回文本框。您好,谢谢提醒。我已经试过了。我将相应地更新我的帖子。哪个版本的Excel-它适用于我的2010。我也在使用2010,这很奇怪。我们正在讨论列表框的
    Enter
    事件,对吗?好的。与此同时,我想了想。从列表框的容器框架的
    Enter
    事件中将焦点设置为包含文本框的框架。
        Private Sub CurrentStatus_Frame_Enter() '<-- Enter event of the frame which contains listbox
            Me.PN_CurrentScan.SetFocus '<-- Setfocus to target textbox
            Me.Scanned_Frame.SetFocus '<-- Setfocus to frame which contains target textbox
        End Sub