BuscarV con un textbox y combobox como 2 criterios de búsqueda juntos
Mi pregunta se refiere a que si tengo un textbox (FECHA) y un combobox(TURNOS DE TRABAJO) como puedo realizar una búsqueda en una base de datos para saber que persona trabajo la fecha y turno que consulte. Me arroje los resultados en un userform así como todo lo que se registro ese día.
1 Respuesta
Puedes escribir lo siguiente:
- Cómo se llama tu hoja con la base de datos
- En qué columna está la fecha
- En qué columna están los turnos de trabajo (y pon unos ejemplos)
- Qué columnas quieres presentar
- Supongo que ya tienes un listbox, cuántas columnas quieres presentar
E spero tus comentarios en ese orden
Ante todo muchas gracias por tu tiempo y atender mi pregunta.
1.- Pienso registrar los datos en diferentes hojas, por ahora estoy registrando en la hoja "AGUA", que se refiere a los datos de cada tanque y caudalimetro del área.
2.- La fecha se encuentra en la columna 1 celda A9, a partir de alli comienzo a llenar la base de datos.
3.- Los turnos se registran en la columna 4, partir de la celda D9. En un dia de trabajo (24 horas) hay tres turnos diurno (7:00am-3:00pm), mixto (3:00pm-11:00pm) y nocturno (11:00pm-6:00am).
4.- Quiero representar todas las columnas de la base datos, no es la misma cantidad de columnas por hoja que registro/consulto. Es decir en la hoja "AGUA" ali registro mas de 15 columnas, en el resto de hojas varia de acuerdo a los parámetros del atea
5.- NO tengo un listbox en el userform, te explico!! en lo que llevo hecho codifique un tipo de búsqueda con un solo criterio y esta se realiza de manera automática, cuando ingreso la fecha en el textbox si la misma ya esta registrada me muestra en el userform los datos que deseo sino esta me muestra un mensaje donde me pregunta si quiero hacer un nuevo registro. El problema esta cuando quiero filtrar la búsqueda es decir quiero consultar fecha y turno.
Dame tu dirección de correo y te envió mi archivo para que observes y aprecies de mejor manera lo que te menciono.
NOTA: En la base de datos (hoja de excel) a medida que se realizan registros me calcula varias cosas. Ej. Ingreso el caudal y me lo refleja en la columna del lado en litros.
CÓDIGO
'Variables'
Public ubica As String
Public control As Integer
Public filalibre As Integer
Private Sub UserForm_Activate()
'Lista desplegable dia'
FORMULARIO.DIA.Clear
DIA.AddItem "Lunes"
DIA.AddItem "Martes"
DIA.AddItem "Miercoles"
DIA.AddItem "Jueves"
DIA.AddItem "Viernes"
DIA.AddItem "Sabado"
DIA.AddItem "Domingo"
'Lista desplegable turno'
FORMULARIO.TURNO.Clear
TURNO.AddItem "Diurno"
TURNO.AddItem "Mixto"
TURNO.AddItem "Nocturno"
'Lista desplegable responsable'
FORMULARIO.RESPONSABLE.Clear
RESPONSABLE.AddItem "Daniel Colmenares"
RESPONSABLE.AddItem "Cristhian Chacon"
RESPONSABLE.AddItem "Jesus Castro"
RESPONSABLE.AddItem "Bernardo Clavijo"
RESPONSABLE.AddItem "Martin Espinoza"
RESPONSABLE.AddItem "Rich Roa"
RESPONSABLE.AddItem "William Echenique"
RESPONSABLE.AddItem "Luis Peña"
End Sub
'Funciones del boton insertar'
Private Sub INSERTAR_Click()
Sheets("AGUA").Select
If control > 0 Then
'Actualizar Datos
Range(ubica).Value = FECHA
Range(ubica).Offset(0, 1).Value = DIA
Range(ubica).Offset(0, 2).Value = HORA
Range(ubica).Offset(0, 3).Value = TURNO
Range(ubica).Offset(0, 4).Value = RESPONSABLE
Range(ubica).Offset(0, 5).Value = Val(SERVICIOS)
control = 0
MsgBox "Datos actualizados"
Else
'Crear nuevos datos
Cells(filalibre, 1).Value = FECHA
Cells(filalibre, 2).Value = DIA
Cells(filalibre, 3).Value = HORA
Cells(filalibre, 4).Value = TURNO
Cells(filalibre, 5).Value = RESPONSABLE
Cells(filalibre, 6).Value = Val(SERVICIOS)
MsgBox "Datos cargados"
End If
FECHA = Empty
DIA = Empty
HORA = Empty
TURNO = Empty
RESPONSABLE = Empty
SERVICIOS = Empty
FECHA.SetFocus
End Sub
'Funciones del boton borrar'
Private Sub BORRAR_Click()
FECHA = Empty
DIA = Empty
HORA = Empty
TURNO = Empty
RESPONSABLE = Empty
SERVICIOS = Empty
FECHA.SetFocus
Sheets("AGUA").Select
MsgBox "Borrado"
End Sub
'Funciones del boton cancelar'
Private Sub CANCELAR_Click()
Unload FORMULARIO
Sheets("AGUA").Select
End Sub
'Codigo buscar'
Private Sub FECHA_AfterUpdate()
Sheets("AGUA").Select
filalibre = Range("A9").End(xlDown).Offset(1, 0).Row
'la variable filalibre guarda el nro. de la primer celda vacía.
control = 0
dato = FECHA
rango = "A9:A" & filalibre
Set midato = ActiveSheet.Range(rango).Find(dato, LookIn:=xlValues, LookAt:=xlWhole)
If (midato) Is Nothing Then
MsgBox "No se encontraron los datos, desea crear uno nuevo"
Else
ubica = midato.Address(False, False)
DIA.Value = Range(ubica).Offset(0, 1).Value
HORA.Value = Range(ubica).Offset(0, 2).Value
TURNO.Value = Range(ubica).Offset(0, 3).Value
RESPONSABLE.Value = Range(ubica).Offset(0, 4).Value
SERVICIOS.Value = Range(ubica).Offset(0, 5).Value
control = 1
End If
Sheets("AGUA").Select
Set midato = Nothing
End Sub
Espero me haya explicado de manera correcta!!
Y no pueden existir más de un registro con la misma fecha y el mismo turno, es decir, ¿solamente una persona está en ese día y en ese turno?
Si es así, entonces la fila donde se encuentra la coincidencia es esta:
Captura la fecha y el turno. Agrega un botón a tu formulario, después de capturar los datos presiona el botón para realizar la búsqueda:
Private Sub CommandButton1_Click() 'Por.Dante Amor fila = "" Set h = Sheets("Agua") If IsDate(TextBox1) Then fecha = CDate(TextBox1) Else MsgBox "El dato en el textbox1, no es un fecha" TextBox1.SetFocus Exit Sub End If ' For i = 9 To h.Range("A" & Rows.Count).End(xlUp).Row If h.Cells(i, "A") = fecha And _ h.Cells(i, "D") = TextBox2 Then fila = i Exit For End If Next If fila = "" Then MsgBox "No existen coincidencias" Else MsgBox "La coincidencia está en la fila : " & fila End If End Sub
Trata de adaptarlo a tu formulario.
.
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
.
Avísame cualquier duda
.
Si justamente es así, en una día deben haber 3 registros (mañana, tarde y noche). Ejemplo. Si yo quisiera revisar los parámetros que registro "Daniel Colmenares" ingreso la fecha y el turno de ese día.
Me parece excelente tu ayuda amigo... Voy a adaptar el código y hacer lo que me dices! te estoy informando...
Dante!! Fabuloso me funciono :-) Gracias.
Ahora bien, para seguir registrando datos ¿Sigo utilizando el código que tengo? veo que en el código que me diste estas realizando un bucle, pero lo que no me queda claro es si esta búsqueda la realiza desde i=9 hasta "n" registros, quisiera que al no encontrar coincidencias me registre uno nuevo y si logro la coincidencia me muestre los datos.
Así es, va desde 9 hasta n registros de la hoja "agua".
Ya tienes la hoja y la fila. Para poner un dato en tu formulario puede ser así:
Private Sub CommandButton1_Click() 'Por.Dante Amor fila = "" Set h = Sheets("Agua") If IsDate(TextBox1) Then fecha = CDate(TextBox1) Else MsgBox "El dato en el textbox1, no es un fecha" TextBox1.SetFocus Exit Sub End If ' For i = 9 To h.Range("A" & Rows.Count).End(xlUp).Row If h.Cells(i, "A") = fecha And _ h.Cells(i, "D") = TextBox2 Then fila = i Exit For End If Next If fila = "" Then MsgBox "No existen coincidencias" Else MsgBox "La coincidencia está en la fila : " & fila textbox9 = h.cells(fila, "F") End If End Sub
Por ejemplo
textbox9 = h.cells(fila, "F")
No puedo avanzar mucho con los ejemplos, no sé cómo se llaman tus textbox ni qué columna quieres en cuál textbox.
Por otra parte, si no hay coincidencias, qué datos quieres que se guarden en la hoja, si no has terminado con la captura. Te sugiero lo siguiente, si no existen coincidencias, entonces el control se regrese al formulario, captures los datos, y pongas otro botón para crear un nuevo.
Con mucho gusto te ayudo con todas tus peticiones.
Cambia la valoración de esta respuesta y crea una nueva pregunta en el tema de microsoft Excel. Ahí me describes con detalle lo que necesitas.
Sal u dos
- Compartir respuesta