Combobox con datos numéricos los trata como texto VBA

Tengo un combobox que me carga datos de una lista (códigos) y al seleccionar un dato del combobox se muestra en en dos textbox otros datos (en uno un nombre interno y en el otro el nombre del articulo). El problema surge que al correr el userform no me muestra los datos en los textbox. Pensé que era un problema en el código, pero me di cuenta que no ya que probé poner letras en los códigos y ahí funciona correctamente. Redondeando: si los datos que tiene en el listado el combobox son textos funciona todo bien, ¿pero si son solo números no. Como hago para indicar que los datos que hay cargados en el combobox son números y no texto? Les paso el código de mi combobox:

Private Sub ComboBox1_Click()
Dim i As Integer
Dim final As Integer
For i = 2 To 1000
If Hoja2.Cells(i, 1) = "" Then
final = i - 1
Exit For
End If
Next
For i = 2 To final
If ComboBox1 = Hoja2.Cells(i, 1) Then
TextBox1 = Hoja2.Cells(i, 2)
TextBox2 = Hoja2.Cells(i, 3)
Exit For
End If
Next
End Sub

2 respuestas

Respuesta
1

En vba de excel, no es necesario que declares las variables, solamente en algunos casos es necesario, ya que todas las variables son declaradas como variant.

Te anexo el código para cambiar el texto a valor, también agregué la parte para encontrar la última fila de la columna "A". El código quedaría así:

Private Sub ComboBox1_Click()
'Act.Por.Dante AMor
    For i = 2 To Hoja2.Range("A" & Rows.Count).End(xlUp).Row
        If Hoja2.Cells(i, 1) = Val(ComboBox1) Then
            TextBox1 = Hoja2.Cells(i, 2)
            TextBox2 = Hoja2.Cells(i, 3)
            Exit For
        End If
    Next
End Sub

Una forma más rápida de encontrar el valor, es utilizando find, de esta forma no importa si son números o letras, tampoco tienes que recorrer toda la columna "A", el código quedaría así:

Private Sub ComboBox1_Click()
'Por.Dante Amor
    Set b = Hoja2.Columns("A").Find(ComboBox1, lookat:=xlWhole)
    If Not b Is Nothing Then
        TextBox1 = Hoja2.Cells(b.Row, 2)
        TextBox2 = Hoja2.Cells(b.Row, 3)
    Else
        MsgBox "El dato no se encontró", vbExclamation
    End If
End Sub

Saludos.Dante Amor

Respuesta

Como bien lo dice su nombre, los "TextBox" son de texto. Sin embargo si querés tratar los datos como número podés utilizar la función Val(texto) que lo que hace es justamente lo que vos estás necesitando

No estoy seguro cual de los elementos que tenés en el código es el que tiene el problema, pero si es el ComboBox1 (ya que es el único que tenés en una comparación), entonces reemplazá la instrucción

If ComboBox1 = Hoja2.Cells(i,1) Then

por

If Val(ComboBox1) = Hoja2.Cells(i,1) Then

Saludos

Gustavo

PD: ojo que si el cuadro puede tener tanto número como texto entonces la instrucción anterior fallará cuando ingreses textos, si este es tu caso avisa y modificamos la instrucción para que soporte cualquier tipo de dato

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas