Como definir criterios de búsqueda alfanuméricos
Tengo un userform que hace búsqueda en base a lotes de productos funciona bien buscando lotes numéricos como este 1804532, ahora si por equivocación escribo una letra o carácter especial arroja un error "los tipos no coinciden" y se va al código fuente, necesito:
- Que si alguien se equivoca, no me lleve al código fuente, solo salga un mensaje que diga "ingrese solo números".
- Y a todas estas surge esta duda ¿cómo puedo hacer que acepte datos alfanuméricos? Ya que es muy probable que haga otro userform donde busque con combinación de números y letras.
- Anexo imagen del error y código de búsqueda.
Private Sub CommandButton1_Click() '------ 'Buscar '------ Dim i& Limpio_El_Formulario If TextBox1 = "" Then Exit Sub Set ws1 = Sheets("Datos") If ws1.[b3] = "" Then Exit Sub '---------------\ 'Filtro avanzado:ws1.Range(ws1.[b2].End(xlDown).Offset(, -1), ws1.[ab2]).AdvancedFilter 2, ws2.[i1:i2], ws2.[k1:al1], False ' Set ws2 = Sheets("Auxiliar") ws2.[i2] = 0 + TextBox1 ws1.Range(ws1.[b2].End(xlDown).Offset(, -1), ws1.[AB2]).AdvancedFilter 2, ws2.[i1:i2], ws2.[k1:AL1], False 'MODIFICAR EL RANGO DE WS1 Y WS2 '---------------/ If ws2.[k2] = "" Then Exit Sub '---------------------------------------------\ 'Reemplazo Id del producto por su descripción:ListBox1.RowSource = ws2.Range("k2:al2").Resize(i - 1).Address(external:=True) 'MODIFICAR AQUI EL RANGO PARA VARIAR LOS TITULOS DEL LISTBOX ' i = ws2.[k1].CurrentRegion.Rows.Count ws2.[p1].Resize(i).Copy ws2.[AM1] With ws2.[f1].CurrentRegion ws2.[p2].Resize(i - 1) = "=INDEX(" & _ .Columns(1).Address & ", MATCH(AM2, " & _ .Columns(2).Address & ", 0))" ws2.[p1].Resize(i) = ws2.[p1].Resize(i).Value End With 'ws2.[u1].Resize(i).Delete xlShiftUp '---------------------------------------------/ ListBox1.RowSource = ws2.Range("k2:AL2").Resize(i - 1).Address(external:=True) 'MODIFICAR AQUI EL RANGO PARA VARIAR LOS TITULOS DEL LISTBOX End Sub
1 Respuesta
Para permitir solamente números desde la captura, agrega el siguiente evento a tu textbox.
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If Not (KeyAscii >= 48 And KeyAscii <= 57) Then KeyAscii = 0 End If End Sub
Cambia TextBox1 por el nombre de tu textbox.
Con eso solamente aceptará números. Por lo tanto en la búsqueda no tendrás el error.
Si vas a buscar letras y números, deberás quitar esta línea:
ws2.[i2] = 0 + TextBox1
Supongo que en esa línea tienes el error, ya que estás intentando sumar un número 0 a un texto.
'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. '.[Avísame cualquier duda
¡Gracias! Diste en el clavo,.
- Con respecto a la línea 0 + textbox1 es correcto al eliminar el 0 + todo funciona bien y no arroja error.
- Ahora el código que limita el ingreso de letras y caracteres especiales no lo conocía ya lo añadí a mi lista de aprendizaje gracias. Lo probé y funciono correctamente.
Con esto ya termine este formulario. Voy a hacer a partir de este el segundo formulario que me falta.
Saludos
Ya prácticamente termine mi proyecto ¿podría enviarle el excel para que me ayude a afinar unos detalles o me guie en la resolución de estos detalles?
Saludos
Con todo gusto te ayudo con tus peticiones, pon tu pregunta con el detalle que necesitas y lo reviso, si hay necesidad de que me envíes tu archivo entonces te lo pediré, mientras podemos seguir con la mecánica aquí en todo expertos.
¡Gracias! tengo los siguientes problemas:
- El formulario no muestra todas la coincidencias en ninguno de los criterios de búsqueda por ejemplo como puede ver en la imagen si coloco el lote 1804532 que en la matriz esta registrado tres veces pero al escribir en el textbox de búsqueda solo aparece una vez en el listbox.
- Cuando uso cualquiera de los criterios de búsqueda lote, área, equipo, producto se desconfiguran los encabezados, esto también lo puede ver en la imagen anexa, ¿Cómo puedo solucionar esto? La idea es que pueda usar los cuatro campos de búsqueda si es necesario.
- El formulario al inicializarse si hago click en cualquiera de los registros devuelve los valores a los controles pero si realizo una búsqueda y hago click en el registro buscado arroja un error que puedes ver en la segunda imagen.
- No se como hacer que se grabe en la celda correspondiente a usuario que modifica todo usuario que modifique el mismo registro. Debe concatenarse con el texto no bórralo.
Tengo dos dudas más pero estas serian las más complicadas. Y es mejor ir por partes porque esto es nuevo para mi. Anexo código fuente
Dim ws1 As Worksheet, ws2 As Worksheet, FaseS, TurnoS Private Sub CommandButton2_Click() '------- 'AGREGAR '------- Pasar_a_la_hoja 1 + ws1.Cells(Rows.Count, "a").End(xlUp).Row Limpio_El_Formulario End Sub Private Sub CommandButton3_Click() '--------- 'Modificar '--------- With ListBox1 Pasar_a_la_hoja 0 + .List(.ListIndex, 0) End With Set ws1 = Sheets("Defectos") Limpio_El_Formulario End Sub Private Sub CommandButton4_Click() '-------- 'Eliminar '-------- Dim LR& With ListBox1 LR = 0 + .List(.ListIndex, 0) End With If MsgBox("¿Confirma eliminación?...", vbYesNo) = vbNo Then Exit Sub ws1.Cells(LR, "a").Resize(, 10).Delete xlShiftUp 'If ws1.[b3] <> "" Then With ws1.Range(ws1.[a2], ws1.[a2].End(xlDown)).Offset(, -1) .Formula = "=row()" .Value = .Value End With 'End If End Sub Private Sub ListBox1_Click() With ListBox1 If .ListIndex = -1 Then Exit Sub TextBox1 = .List(.ListIndex, 0) 'LOte ComboBox1 = .List(.ListIndex, 1) ' Producto Controls(.List(.ListIndex, 2)) = True 'If .List(.ListIndex, 2) = "1" Then Fase.Value = True Else Fase.Value = False ComboBox2 = .List(.ListIndex, 3) ' Áreas ComboBox3 = .List(.ListIndex, 4) ' Equipos TextBox26 = CDate(.List(.ListIndex, 5)) ' Fecha detección TextBox27 = Format(.List(.ListIndex, 6), "hh:mm:ss am/pm") 'Hora detección 'Usuario 7 Controls(.List(.ListIndex, 8)) = True Textbox3 = .List(.ListIndex, 9) TextBox4 = .List(.ListIndex, 10) TextBox5 = .List(.ListIndex, 11) TextBox6 = .List(.ListIndex, 12) TextBox7 = .List(.ListIndex, 13) TextBox8 = .List(.ListIndex, 14) TextBox9 = .List(.ListIndex, 15) TextBox10 = .List(.ListIndex, 16) TextBox11 = .List(.ListIndex, 17) TextBox12 = .List(.ListIndex, 18) TextBox13 = .List(.ListIndex, 19) TextBox14 = .List(.ListIndex, 20) TextBox15 = .List(.ListIndex, 21) TextBox16 = .List(.ListIndex, 22) TextBox17 = .List(.ListIndex, 23) TextBox18 = .List(.ListIndex, 24) TextBox19 = .List(.ListIndex, 25) TextBox20 = .List(.ListIndex, 26) TextBox21 = .List(.ListIndex, 27) TextBox22 = .List(.ListIndex, 28) TextBox23 = .List(.ListIndex, 29) TextBox24 = .List(.ListIndex, 30) TextBox25 = .List(.ListIndex, 31) If .List(.ListIndex, 32) = "1" Then CheckBox1.Value = True Else CheckBox1.Value = False If .List(.ListIndex, 33) = "1" Then CheckBox2.Value = True Else CheckBox2.Value = False If .List(.ListIndex, 34) = "1" Then CheckBox3.Value = True Else CheckBox3.Value = False If .List(.ListIndex, 35) = "1" Then CheckBox4.Value = True Else CheckBox4.Value = False If .List(.ListIndex, 36) = "1" Then CheckBox5.Value = True Else CheckBox5.Value = False If .List(.ListIndex, 37) = "1" Then CheckBox6.Value = True Else CheckBox6.Value = False If .List(.ListIndex, 38) = "1" Then CheckBox9.Value = True Else CheckBox9.Value = False If .List(.ListIndex, 39) = "1" Then RNC.Value = True Else RNC.Value = False 'RNC If .List(.ListIndex, 40) = "1" Then Reproceso.Value = True Else Reproceso.Value = False 'Reproceso If .List(.ListIndex, 41) = "1" Then Revision100.Value = True Else Revision100.Value = False 'Revision100% If .List(.ListIndex, 42) = "1" Then Rechazado.Value = True Else Rechazado.Value = False 'Rechazado 'Usuario modifador 43 TextBox2 = .List(.ListIndex, 44) & " " & "Registrado por:" & " " & .List(.ListIndex, 7) & " " & "Modificado por:" & " " & .List(.ListIndex, 43) 'Observaciones End With End Sub Private Sub TextBox28_Change() '--------------------- 'BUSQUEDA POR PRODUCTO '--------------------- On Error Resume Next Set b = Sheets("Defectos") 'Cambiar aqui el "NOMBRE" de la hoja criterio de bsuqueda uf = b.Range("A" & Rows.Count).End(xlUp).Row If Trim(TextBox28.Value) = "" Then Me.ListBox1.List() = b.Range("A2:AR" & uf).Value Me.ListBox1.RowSource = "Defectos!A2:AR" & uf 'Cambiar aqui el "NOMBRE" de la hoja criterio de bsuqueda Exit Sub End If b.AutoFilterMode = False Me.ListBox1 = Clear Me.ListBox1.RowSource = Clear Me.ListBox1.ColumnHeads = True For i = 2 To uf strg = b.Cells(i, 2).Value 'Aqui cambio la "COLUMNA" CRITERIO DE BUSQUEDA If UCase(strg) Like UCase(TextBox28.Value) & "*" Then 'Aqui se agregan items al listbox Me.ListBox1.ColumnCount = 43 Me.ListBox1.List = Range("a1:ar1").Value 'Esta linea define el rango para que Me.ListBox1.ColumnHeads = True 'aparesan todos los items en el lixbox de busqueda Me.ListBox1.AddItem b.Cells(i, 1) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = b.Cells(i, 2) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = b.Cells(i, 3) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = b.Cells(i, 4) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = b.Cells(i, 5) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = b.Cells(i, 6) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = Format(b.Cells(i, 7), "hh:mm:ss am/pm") Me.ListBox1.List(Me.ListBox1.ListCount - 1, 7) = b.Cells(i, 8) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 38) = b.Cells(i, 39) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 39) = b.Cells(i, 40) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 40) = b.Cells(i, 41) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 41) = b.Cells(i, 42) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 42) = b.Cells(i, 43) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 43) = b.Cells(i, 44) End If Next i Me.ListBox1.ColumnHeads = True Me.ListBox1.ColumnWidths = "45;300;55;100;200;70;60;55;55;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;51;62;50" End Sub Private Sub TextBox29_Change() '------------------ 'BUSQUEDA POR LOTES '------------------ On Error Resume Next Set b = Sheets("Defectos") 'Cambiar aqui el "NOMBRE" de la hoja criterio de bsuqueda uf = b.Range("A" & Rows.Count).End(xlUp).Row If Trim(TextBox29.Value) = "" Then Me.ListBox1.List() = b.Range("A2:AR2" & uf).Value Me.ListBox1.ColumnHeads = True Me.ListBox1.RowSource = "Defectos!A2:AR2" & uf 'Cambiar aqui el "NOMBRE" de la hoja criterio de bsuqueda Exit Sub End If b.AutoFilterMode = False Me.ListBox1 = Clear Me.ListBox1.RowSource = Clear For i = 2 To uf strg = b.Cells(i, 1).Value 'Aqui cambio la "COLUMNA" CRITERIO DE BUSQUEDA If UCase(strg) Like UCase(TextBox29.Value) & "*" Then 'Aqui se agregan items al listbox Me.ListBox1.ColumnCount = 43 Me.ListBox1.List = Range("a1:ar1").Value 'Esta linea define el rango para que Me.ListBox1.ColumnHeads = True 'aparesan todos los items en el lixbox de busqueda Me.ListBox1.AddItem b.Cells(i, 1) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = b.Cells(i, 2) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = b.Cells(i, 3) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = b.Cells(i, 4) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = b.Cells(i, 5) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = b.Cells(i, 6) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = Format(b.Cells(i, 7), "hh:mm:ss am/pm") Me.ListBox1.List(Me.ListBox1.ListCount - 1, 7) = b.Cells(i, 8) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 8) = b.Cells(i, 9) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 9) = b.Cells(i, 10) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 10) = b.Cells(i, 11) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 11) = b.Cells(i, 12) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 12) = b.Cells(i, 13) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 13) = b.Cells(i, 14) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 14) = b.Cells(i, 15) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 15) = b.Cells(i, 16) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 16) = b.Cells(i, 17) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 17) = b.Cells(i, 18) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 18) = b.Cells(i, 19) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 19) = b.Cells(i, 20) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 20) = b.Cells(i, 21) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 21) = b.Cells(i, 22) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 22) = b.Cells(i, 23) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 23) = b.Cells(i, 24) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 24) = b.Cells(i, 25) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 25) = b.Cells(i, 26) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 26) = b.Cells(i, 27) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 27) = b.Cells(i, 28) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 28) = b.Cells(i, 29) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 29) = b.Cells(i, 30) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 30) = b.Cells(i, 31) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 31) = b.Cells(i, 32) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 32) = b.Cells(i, 33) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 33) = b.Cells(i, 34) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 34) = b.Cells(i, 35) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 35) = b.Cells(i, 36) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 36) = b.Cells(i, 37) 'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 37) = b.Cells(i, 38) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 38) = b.Cells(i, 39) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 39) = b.Cells(i, 40) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 40) = b.Cells(i, 41) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 41) = b.Cells(i, 42) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 42) = b.Cells(i, 43) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 43) = b.Cells(i, 44) End If Next i Me.ListBox1.ColumnWidths = "45;300;55;100;200;70;60;55;55;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;51;62;50" 'Me.ListBox1.RowSource = "A2:AR2" 'OJO ESTO ES IMPORTANTE PARA LOS EMCABEZADOS SE TOMA LA FILA DESPUES DE ESTOS Me.ListBox1.ColumnHeads = True End Sub Private Sub TextBox30_Change() '----------------- 'BUSQUEDA POR ÁREA '----------------- On Error Resume Next Set b = Sheets("Defectos") 'Cambiar aqui el "NOMBRE" de la hoja criterio de bsuqueda uf = b.Range("A" & Rows.Count).End(xlUp).Row If Trim(TextBox30.Value) = "" Then Me.ListBox1.List() = b.Range("A2:AR" & uf).Value Me.ListBox1.RowSource = "Defectos!A2:AR" & uf 'Cambiar aqui el "NOMBRE" de la hoja criterio de bsuqueda Exit Sub End If b.AutoFilterMode = False Me.ListBox1 = Clear Me.ListBox1.RowSource = Clear Me.ListBox1.ColumnHeads = True For i = 2 To uf strg = b.Cells(i, 4).Value 'Aqui cambio la "COLUMNA" CRITERIO DE BUSQUEDA If UCase(strg) Like UCase(TextBox30.Value) & "*" Then 'Aqui se agregan items al listbox Me.ListBox1.ColumnCount = 43 Me.ListBox1.List = Range("a1:ar1").Value 'Esta linea define el rango para que Me.ListBox1.ColumnHeads = True 'aparesan todos los items en el lixbox de busqueda Me.ListBox1.AddItem b.Cells(i, 1) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = b.Cells(i, 2) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = b.Cells(i, 3) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = b.Cells(i, 4) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = b.Cells(i, 5) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = b.Cells(i, 6) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = Format(b.Cells(i, 7), "hh:mm:ss am/pm") Me.ListBox1.List(Me.ListBox1.ListCount - 1, 7) = b.Cells(i, 8) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 38) = b.Cells(i, 39) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 39) = b.Cells(i, 40) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 40) = b.Cells(i, 41) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 41) = b.Cells(i, 42) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 42) = b.Cells(i, 43) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 43) = b.Cells(i, 44) End If Next i Me.ListBox1.ColumnHeads = True Me.ListBox1.ColumnWidths = "45;300;55;100;200;70;60;55;55;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;51;62;50" End Sub Private Sub TextBox31_Change() '------------------- 'BUSQUEDA POR EQUIPO '------------------- On Error Resume Next Set b = Sheets("Defectos") 'Cambiar aqui el "NOMBRE" de la hoja criterio de bsuqueda uf = b.Range("A" & Rows.Count).End(xlUp).Row If Trim(TextBox31.Value) = "" Then Me.ListBox1.List() = b.Range("A2:AR" & uf).Value Me.ListBox1.RowSource = "Defectos!A2:AR" & uf 'Cambiar aqui el "NOMBRE" de la hoja criterio de bsuqueda Exit Sub End If b.AutoFilterMode = False Me.ListBox1 = Clear Me.ListBox1.RowSource = Clear Me.ListBox1.ColumnHeads = True For i = 2 To uf strg = b.Cells(i, 5).Value 'Aqui cambio la "COLUMNA" CRITERIO DE BUSQUEDA If UCase(strg) Like UCase(TextBox31.Value) & "*" Then 'Aqui se agregan items al listbox Me.ListBox1.ColumnCount = 43 Me.ListBox1.List = Range("a1:ar1").Value 'Esta linea define el rango para que Me.ListBox1.ColumnHeads = True 'aparesan todos los items en el lixbox de busqueda Me.ListBox1.AddItem b.Cells(i, 1) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = b.Cells(i, 2) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = b.Cells(i, 3) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = b.Cells(i, 4) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = b.Cells(i, 5) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = b.Cells(i, 6) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = Format(b.Cells(i, 7), "hh:mm:ss am/pm") Me.ListBox1.List(Me.ListBox1.ListCount - 1, 7) = b.Cells(i, 8) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 38) = b.Cells(i, 39) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 39) = b.Cells(i, 40) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 40) = b.Cells(i, 41) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 41) = b.Cells(i, 42) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 42) = b.Cells(i, 43) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 43) = b.Cells(i, 44) End If Next i Me.ListBox1.ColumnHeads = True Me.ListBox1.ColumnWidths = "45;300;55;100;200;70;60;55;55;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;51;62;50" End Sub Private Sub UserForm_Initialize() 'Condiciones del Formulario al inicializarce Dim fila As Long Application.DisplayAlerts = False Application.ScreenUpdating = False Set b = Sheets("Defectos") 'Cambiar aqui el "NOMBRE" de la hoja criterio de bsuqueda uf = b.Range("A" & Rows.Count).End(xlUp).Row uc = b.Cells(1, Columns.Count).End(xlToLeft).Address wc = Mid(uc, InStr(uc, "$") + 1, InStr(2, uc, "$") - 2) With Me.ListBox1 .ColumnCount = 45 .ColumnHeads = True '01 02 03 04 05 06 07 08 09 41 42 43 44 .ColumnWidths = "45;300;55;100;200;70;60;55;55;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;45;51;62;50;0;0" .RowSource = "Defectos!A2:" & wc & uf 'Cambiar aqui el "NOMBRE" de la hoja criterio de bsuqueda End With Application.DisplayAlerts = True Application.ScreenUpdating = True Set ws1 = Sheets("Defectos") 'If ws1.[a2] = "" Then Exit Sub Set ws2 = Sheets("Auxiliar") 'Combobox1 Productos With ComboBox1 .ColumnHeads = True .ColumnCount = 2 .ColumnWidths = "300;0" .ListWidth = 300 .RowSource = ws2.Range(ws2.[f2], ws2.[g1].End(xlDown)).Address(external:=True) End With Set ws2 = Sheets("Auxiliar") 'Combobox2 Áreas With ComboBox2 .ColumnHeads = True .ColumnCount = 2 .ColumnWidths = "300;0" .ListWidth = 300 .RowSource = ws2.Range(ws2.[d2], ws2.[e1].End(xlDown)).Address(external:=True) End With Set ws2 = Sheets("Auxiliar") 'Combobox3 Equipos With ComboBox3 .ColumnHeads = True .ColumnCount = 2 .ColumnWidths = "300;0" .ListWidth = 300 .RowSource = ws2.Range(ws2.[b2], ws2.[c1].End(xlDown)).Address(external:=True) End With TextBox26 = Date TextBox27 = Format(Time, "hh:mm:ss am/pm") FaseS = Array("Envase", "Empaque") TurnoS = Array("Primero", "Segundo", "SobreTiempo", "Feriado") End Sub Private Sub Pasar_a_la_hoja(LR&) Dim iFase Dim iTurno With ws1.Cells(LR, "a") .Value = .Row .Cells(1, 1) = TextBox1 ' Lote .Cells(1, 2) = ComboBox1.Value ' Producto .Cells(1, 4) = ComboBox2.Value ' Áreas .Cells(1, 5) = ComboBox3.Value ' Equipos .Cells(1, 6) = CDate(TextBox26) ' Fecha detección .Cells(1, 7) = TextBox27.Value 'Hora detección .Cells(1, 8) = Environ("Username") 'Firma de usuario .Cells(1, 45) = TextBox2.Value 'Observaciones For Each iFase In FaseS If Controls(iFase) Then .Cells(1, 3) = Controls(iFase).Name Exit For End If Next For Each iTurno In TurnoS If Controls(iTurno) Then .Cells(1, 9) = Controls(iTurno).Name Exit For End If Next ws1.Range(.Cells(1, 10), .Cells(1, 32)).ClearContents If Textbox3 <> "" Then .Cells(1, 10) = 0 + Textbox3 ' Desv 01 If TextBox4 <> "" Then .Cells(1, 11) = 0 + TextBox4 ' Desv 02 If TextBox5 <> "" Then .Cells(1, 12) = 0 + TextBox5 ' Desv 03 If TextBox6 <> "" Then .Cells(1, 13) = 0 + TextBox6 'Desv 04 If TextBox7 <> "" Then .Cells(1, 14) = 0 + TextBox7 'Desv 05 If TextBox8 <> "" Then .Cells(1, 15) = 0 + TextBox8 ' Desv 01 If TextBox9 <> "" Then .Cells(1, 16) = 0 + TextBox9 ' Desv 02 If TextBox10 <> "" Then .Cells(1, 17) = 0 + TextBox10 ' Desv 03 If TextBox11 <> "" Then .Cells(1, 18) = 0 + TextBox11 'Desv 04 If TextBox12 <> "" Then .Cells(1, 19) = 0 + TextBox12 'Desv 05 If TextBox13 <> "" Then .Cells(1, 20) = 0 + TextBox13 ' Desv 01 If TextBox14 <> "" Then .Cells(1, 21) = 0 + TextBox14 ' Desv 02 If TextBox15 <> "" Then .Cells(1, 22) = 0 + TextBox15 ' Desv 03 If TextBox16 <> "" Then .Cells(1, 23) = 0 + TextBox16 'Desv 04 If TextBox17 <> "" Then .Cells(1, 24) = 0 + TextBox17 'Desv 05 If TextBox18 <> "" Then .Cells(1, 25) = 0 + TextBox18 ' Desv 01 If TextBox19 <> "" Then .Cells(1, 26) = 0 + TextBox19 ' Desv 02 If TextBox20 <> "" Then .Cells(1, 27) = 0 + TextBox20 ' Desv 03 If TextBox21 <> "" Then .Cells(1, 28) = 0 + TextBox21 'Desv 04 If TextBox22 <> "" Then .Cells(1, 29) = 0 + TextBox22 'Desv 05 If TextBox23 <> "" Then .Cells(1, 30) = 0 + TextBox23 'Desv 04 If TextBox24 <> "" Then .Cells(1, 31) = 0 + TextBox24 'Desv 05 If TextBox25 <> "" Then .Cells(1, 32) = 0 + TextBox25 ' Desv 01 If RNC.Value = True Then .Cells(1, 40) = "1" 'Accion RNC If Reproceso.Value = True Then .Cells(1, 41) = "1" 'Accion reproceso If Revision100.Value = True Then .Cells(1, 42) = "1" 'Accionrevision 100% If Rechazado.Value = True Then .Cells(1, 43) = "1" 'Accion rechazado If CheckBox1.Value = True Then .Cells(1, 33) = "1L vencida" 'limpieza vencida If CheckBox2.Value = True Then .Cells(1, 34) = "1CC" 'CC If CheckBox3.Value = True Then .Cells(1, 35) = "1 Ident ause" 'Identificacion ausente If CheckBox4.Value = True Then .Cells(1, 36) = "1bpd bpm" 'BPD/BPM If CheckBox5.Value = True Then .Cells(1, 37) = "1animales" 'Animales If CheckBox6.Value = True Then .Cells(1, 38) = "1 a e sucioc" 'rea equipos sucios If CheckBox9.Value = True Then .Cells(1, 39) = "1Higiene" 'Higiene 'If CommandButton2.Enabled = True Then .Cells(1, 26) = "1" If CommandButton3.Enabled = False Then .Cells(1, 44) = "" Else: Cells(1, 44) = Environ("username") End With End Sub Private Sub Limpio_El_Formulario() Dim i%, iFase, iTurno ListBox1.RowSource = "" For i = 2 To 27: Controls("Textbox" & i) = "": Next For Each iFase In FaseS Controls(iFase).Value = False Next For Each iTurno In TurnoS Controls(iTurno).Value = False Next RNC = False Reproceso = False Revision100 = False Rechazado = False CheckBox1 = False CheckBox2 = False CheckBox3 = False CheckBox4 = False CheckBox5 = False CheckBox6 = False CheckBox9 = False ComboBox1.ListIndex = -1 ComboBox2.ListIndex = -1 ComboBox3.ListIndex = -1 TextBox26 = Date TextBox27 = Format(Time, "hh:mm:ss am/pm") End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) With Sheets("Defectos") If .[a2] = "" Then Exit Sub '.Range(.[a3], .[a2].End(xlDown)).ClearContents End With End Sub
- Compartir respuesta