Excel用户窗体文本框常量集合焦点

首先我要感谢你们所有人。 也许你没有注意到,但你帮我从头开始把VBA抓到一定程度。 我仍然在学习过程中,所以我可能会错过一些非常简单的事情,请温柔:)

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

在这里输入图像说明

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

1.扫描件号码:这是扫描仪input数值的文本框。 我收到input后,我将这些数据小心地转换为一个variables,并清除文本框的值如下:

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 = "" 

在对扫描的数据进行一些校正之后,我基本上把它写到工作簿中的一张纸上。 然后,我在同一工作簿中也有一个数据透视表,它使用这个扫描数据作为数据源,并计算每个零件号扫描多less个零件。

2.当前状态:此列表框包含扫描的所有零件编号(来自上述数据透视表)并等待被扫描(来自另一个工作表)。 然后每次扫描一个新的部分时自动刷新它。

3.列表框滚动条:因为我有很长的零件号码列表,所以我无法将所有东西都放在屏幕上,这就是列表框创build滚动条的原因。

足够的背景我想:)

所以,如果我们来关心。 由于我的拼图使用无绳扫描仪来做这个操作,有时他们没有机会看到屏幕,所以他们不明白光标是否在“扫描的零件号码文本框”上。 这就是为什么我不pipe发生什么事情都需要把注意力放在那个盒子上(当然,如果仓库烧毁,地震或者海啸撞到地方,我们什么也做不了,但是不要去想这些)。

我曾试过的东西:

  1. 首先,我从属性窗口中禁用所有剩余的对象
  2. 然后,我将所有控件的制表符分开:

     Dim contr As Control For Each contr In ScannerInterface.Controls On Error Resume Next contr.TabStop = False Next ScannerInterface.PN_CurrentScan.TabStop = True 
  3. 将setfocus属性添加到所有button点击:

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

     Private Sub CurrentStatus_List_Click() Me.PN_CurrentScan.SetFocus End Sub 
  5. 添加设置焦点进入和退出列表框的事件然而这不起作用:

     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 

所以,所有这些反措施,我已经设法改善到某一点,只有当我单击列表框旁边的滚动条,文本框失去焦点,没有在文本框中单击我无法设置焦点再次。 我尝试所有事件与列表框非他们工作。 有没有办法解决这个问题,还是我需要处理这个问题? 预先感谢您的支持。

解:

感谢@Rory,我们设法解决了我的问题。 正如他在下面的答案中注意到并解释的,我的文本框和列表框都是在框架中。 我尝试了几个setfocus选项,但我总是把重点放在文本框。 然而,解决的办法是把重点放在包含目标文本框的框架上:

  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 

有(最终)注意到,您的两个控件都在容器的框架控件中,您可以实际使用包含该列表框的框架的Enter事件将焦点设置为包含该文本框的框架,而不是文本框本身。