我在Excel上有一个简单的表单,其中包含一些当前从另一个表单拖动的信息字段。只有一个文本框(txtEtiqueta),我使用手持扫描仪输入数据。我的文本框中的这些数据使用txtEtiqueta_AfterUpdate()事件添加到列表框中。我的问题是我不能把重点放在我的txtEtiqueta文本框上,我应该得到这个,以便继续扫描条形码。
Private Sub txtEtiqueta_AfterUpdate()
Me.ListBox2.ColumnCount = 7
Me.ListBox2.AddItem Me.txtEtiqueta.Value
Me.ListBox2.List(ListBox2.ListCount - 1, 1) = Me.txtUsuario3.Value
Me.ListBox2.List(ListBox2.ListCount - 1, 2) = Me.txtFecha2.Value
Me.ListBox2.List(ListBox2.ListCount - 1, 3) = Me.txtConductor.Value
Me.ListBox2.List(ListBox2.ListCount - 1, 4) = Me.txtPatente2.Value
Me.ListBox2.List(ListBox2.ListCount - 1, 5) = Me.txtCelular2.Value
Me.ListBox2.List(ListBox2.ListCount - 1, 6) = Me.txtEmpresa2.Value
Me.TextBox1.Value = Me.ListBox2.ListCount
End Sub
在这样做之后,我将txtEtiqueta.value设置为null与另一个textbox_change事件(通过计算列表框项目而改变)
Private Sub TextBox1_Change()
Me.txtEtiqueta.Value = Null
End Sub
最后,在清理txtEtiqueta值之后,我需要再次将焦点设置回来,但我不知道如何实现它。我试过这个,没有成功:
Private Sub TextBox1_Change()
Me.txtEtiqueta.Value = Null
Me.txtEtiqueta.SetFocus
End Sub
可悲的是,之前的代码行实际上将txtEtiqueta的值设置为null,但它没有将焦点设置为它。
答案 0 :(得分:0)
请记住
Private Sub TextBox1_Change()
Me.txtEtiqueta.Value = Null
End Sub
将触发txtEtiqueta_AfterUpdate
事件,该事件正在更改TextBox1的值,从而触发TextBox1_Change
事件。这应该是一个在某个地方被打破的无限循环。也许VBA认识到txtEtiqueta_AfterUpdate
用第二轮中完全相同的值替换TextBox1中的现有值,并确定没有发生任何更改。也许你在其他地方有一些代码,你在问题中提到但没有显示。它并不重要。
解决问题的方法在于确保在将焦点设置回txtEtiqueta
后不会发生任何事件。为此目的使用Application.EnableEvents
属性,可能是这样的: -
Private Sub TextBox1_Change()
Application.EnableEvents = False
Me.txtEtiqueta.Value = Null
Me.txtEtiqueta.SetFocus
Application.EnableEvents = True
End Sub
使用此代码,您可以通过将其值设置为Null来阻止txtEtiqueta_AfterUpdate
事件被触发。