Capturar datos sin botón de guardar

Deseo hacer un formulario de captura de datos en la cual se pueda validar 15 dígitos en el textbox para luego ese dato sea pasado a una fila de la columna C, pero que se ejecute sin un botón de guardado (evento click) ya que l ser muchos registros sera usado con un capturador escaneador.

3 respuestas

Respuesta
3

Sera usado con un capturador escaneador.

Pon el siguiente código en tu userform.

Private Sub TextBox1_Change()
  With TextBox1
    If .Value <> "" And Len(.Value) = 15 Then
      Range("C" & Rows.Count).End(3)(2).Value = .Value
      .Value = ""
    End If
  End With
End Sub

En automático enviará el dato a la celda C2, limpiará el textbox, si vuelves a escanear otro código, entonces enviará el dato a la celda C3, limpiará el textbox y estará listo para otra captura.

Muchas gracias por la ayuda me sirvió en una, pero me gustaría que me explicara el código para poder entenderlo. se lo agradezco mucho.

Verifica si el valor del textbox es difrente de blanco y tiene una longitude de 15

If .Value <> "" And Len(.Value) = 15 Then

pone el valor del telbox en la siguiente celda disponible en la columna C
Range("C" & Rows.Count).End(3)(2).Value = .Value

Disculpa en esta línea
Range("C" & Rows.Count).End(3)(2).Value = .Value
los que estan en parentesis  (3)(2)   ¿que indican? 
El with creo que repite TextBox1 y que cuando haces luego solo colocas un punto y lo que sigue.
Bueno recién aprendo.. y me sirvió mucho de ayuda para armar mi macro...
Tengo una duda más si me podrías ayudar. Para completar. Mi macro

Range("C" & Rows.Count).End(3)(2).Value = .Value
Los que estan en parentesis (3)(2) ¿Qué indican?

Aquí explico que significa el (3)

Duda en la expresión o sintaxis .end(3) o end(xlup)

Y el (2) significa la fila siguiente hacia abajo.

Bueno ya utilice lo que me compartió en la solución, lo que me falta es algo.

En el textbox ya tengo que solo ingrese 15 dígitos, pero me faltaría una validación para que no acepte duplicados, pensé que salga un mensaje y a su vez el beep del sistema ¿se podrá?
la columna C2 es la que se ingresa el dato, quiero que si se cierra por error el formulario inicie desde la siguiente fila sin dato (buscar la ultima fila con dato y la que sigue continuar)
Ah si, mi detalle mas resaltante que tengo es:

cuando ingreso los datos de 15 dígitos graba normal en la hoja de calculo pero los
combobox y 3 textbox, si le cambio el dato como la ubicación o palet modifica todo por completo ¿como puedo hacer para que no se cambie todo?

dejo mi código:

Private Sub UserForm_Initialize()
'CARGAR LA HORA
Label8.Caption = Format(Time, "hh:mm:ss")
'CARGAR LA FECHA
Label7.Caption = Format(Date, "dd/mm/yyyy")

End Sub

Private Sub txt_IngresarImei_Change()
'CAPTURAR DATO EN LA CELDA
With txt_IngresarImei
If .Value <> "" And Len(.Value) = 15 Then
Range("C" & Rows.Count).End(3)(2).Value = .Value
.Value = ""
End If
End With
'CONTADOR DE REGISTROS
Dim contarfila As Integer
contarfila = 0

ultimafila = Sheets("REGISTRAR").Range("C" & Rows.Count).End(xlUp).Row
For i = 2 To ultimafila
If Sheets("REGISTRAR").Cells(i, 3) <> Empty Then
contarfila = contarfila + 1
End If
Next i

txt_conteos = contarfila

'PONER OBSERVACIONES, AUDITOR, PALLET, UBICACION, FECHA
Dim fila As Integer

fila = 2

Do While Cells(fila, 3) <> ""
' Cells(fila, 1).Value
'Cells(fila, 2).Value
Cells(fila, 4).Value = txt_observacion
Cells(fila, 5).Value = cbo_Auditor
Cells(fila, 6).Value = txt_pallet
Cells(fila, 7).Value = txt_ubicacion
Cells(fila, 8).Value = Format(Date, "dd/mm/yyyy")

fila = fila + 1
Loop

End Sub

No entendí qué necesitas.

Eso es un nuevo tema, sin duda tiene que ver con tu proyecto, pero es diferente. Crea una nueva pregunta y explica paso a paso qué necesitas.

Respuesta
1

Si comentas que el texbox tendría solamente 15 dígitos, se me ocurre que podrías utilizar la función Len limitado a 15 caracteres, puedes poner el siguiente código dentro del texbox para que al detectar 15 dígitos en el texbox active la macro que pase los datos a la fila de la columna C como indicas.

Dim Caracter As String
Caracter = TextBox1
If Len(Caracter) = 15 Then
MsgBox "aqui la macro para pasar los datos a la hoja"
Else
'
End If
Respuesta
1

Puedes adaptar este ejemplo, si te fijas detecta cuando se han ingresado una cierta cantidad de datos y agrega una / tu puedes modificar para que detecte que se ingresen por cantidad de datos y llame a la macro que guarda

https://www.youtube.com/watch?v=jijZxdSqPZo&list=PLdK9H5dMIfQh-SBezPhSkrxxnh0o_UR9b

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas