Como crear Formulario y macro excel scanner

Necesito crear un formulario con 3 campos: uno para escanear códigos de barra, y que solo me permita escanear en la columna 1 llamada ID, y que automáticamente al leer el código, baje a la fila siguiente y me siga permitiendo escanear más códigos. El segundo campo, la columna B llamada turno, que sea una lista desplegable con 3 turnos: mañana, tarde y noche, y el tercer campo llamado correo xon lista desplegable de Andreani, Mercado libre o Retiro en tienda. Estos 2 últimos campos previamente elegidos en el formulario, necesito que se vayan llenando automáticamente en sus columnas B y C a medida que vaya leyendo los códigos de barra. Es algo conplejo para mi, ¿hay alguna macro y formulario para tal fin?

2 Respuestas

Respuesta
1
Respuesta
3

H o l a y bienvenido a TodoExpertos!

Crea un userform con los siguientes controles: 3 label, 2 combobox y un textbox, como se ve la siguiente imagen:

Pon el siguiente código en el userform.

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Dim lr As Long
  If TextBox1.Value <> "" And ComboBox1.ListIndex > -1 And ComboBox2.ListIndex > -1 Then
    '
    With Sheets("Hoja8")
      lr = .Range("A" & Rows.Count).End(3).Row + 1
      .Range("A" & lr).Value = TextBox1
      .Range("B" & lr).Value = ComboBox1
      .Range("C" & lr).Value = ComboBox2
    End With
    TextBox1.Value = ""
    Cancel = True
  End If
End Sub
Private Sub UserForm_Activate()
  With ComboBox1
    .AddItem "mañana"
    .AddItem "tarde"
    .AddItem "noche"
    .TabIndex = 0
    .SetFocus
  End With
  '
  With ComboBox2
    .AddItem "Andreani"
    .AddItem "Mercado libre"
    .AddItem "Retiro en tienda"
    .TabIndex = 1
  End With
  TextBox1.TabIndex = 2
End Sub

Para poner el código, simplemente resiona dobleclici en el userform, se abrirá un panel blanco, ahí pegas el código.


Previamente configura tu scanner para que después de la captura envié en automático un enter.

Funciona de la siguiente manera:

Seleccionas el dato del combo1 y del combo2, después scanneas el código, en automático, se guardará el registro en la "Hoja8". Cambia "Hoja8" en la macro por el nombre donde quieras almacenar la información. El campo del ID se limpiará y pondrá el cursor en el textbox1 para recibir el siguiente scanner.

Hola Dante!, ante todo, mil gracias por tu tiempo y ayuda. Te comento que me quedo perfecto con la ayuda que me diste. Lo ultimo que me queda de preguntarte, es como hago para incluir un campo (columna DE seria) de fecha y hora de registro de cada línea que voy escaneando. Y como se hace para que el formulario te obligue a que ningún campo que de vacío (osea que turno, correo, ID y Fecha no deben inexorablemente completarse. Mil gracias, y que estés bien!

Después de esta línea:

.Range("C" & lr).Value = ComboBox2

Agrega esta:

.Range("D" & lr).Value = Now

La validación ya existe, no graba el registro hasta que los 3 campos están llenos.

¡Gracias! Genio, me salvaste 

Un placer ayudarte, g racias por comentar.

Dante, buenas tardes! Le comento que el formulario funciona perfecto, excepto al momento de validar los registros, es decir, si un campo queda vacío igual graba el registro. Cual seria la manera para que impida dejar un campo vacío y que salga un cartel de error "NINGÚN DATO DEBE QUEDAR VACIO: COMPLETE LOS CAMPOS" si se pasa al otro campo y el usuario dejo un campo sin llenar.

Gracias

Prueba con lo siguiente

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Dim lr As Long
  If TextBox1.Value = "" Or ComboBox1.Value = "" Or ComboBox2.Value = "" Then
    MsgBox "Existen campos en blanco"
    Cancel = False
    Exit Sub
  End If
  If TextBox1.Value <> "" And ComboBox1.ListIndex > -1 And ComboBox2.ListIndex > -1 Then
    '
    With Sheets("Hoja8")
      lr = .Range("A" & Rows.Count).End(3).Row + 1
      .Range("A" & lr).Value = TextBox1
      .Range("B" & lr).Value = ComboBox1
      .Range("C" & lr).Value = ComboBox2
    End With
    TextBox1.Value = ""
    Cancel = True
  End If
End Sub
Private Sub UserForm_Activate()
  With ComboBox1
    .AddItem "mañana"
    .AddItem "tarde"
    .AddItem "noche"
    .TabIndex = 0
    .SetFocus
  End With
  '
  With ComboBox2
    .AddItem "Andreani"
    .AddItem "Mercado libre"
    .AddItem "Retiro en tienda"
    .TabIndex = 1
  End With
  TextBox1.TabIndex = 2
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas