在listbox additem

时间:2017-08-18 21:20:03

标签: excel-vba listbox userform vba excel

我在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,但它没有将焦点设置为它。

1 个答案:

答案 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事件被触发。