Foro de Ayuda Excel | ||
| Soluciona tus problemas con Excel |
|
#1
| |||
| |||
| Hola, He creado una macro para buscar un nombre en una lista a través de un formulario en el utilizo un combobox para la búsqueda. La lista de datos contiene dos campos: El nombre del operario y el turno al que pertenece. El código que utilzo es: Private Sub btnaceptar_Click() Dim turno$ Dim fila As Long Dim encontrada$ Worksheets("PERSONAL").Activate encontrada = "no encontrada" fila = 3 Do While Cells(fila, 6) <> Empty If UCase(ActiveSheet.Cells(fila, 6)) = UCase(cmboperario) Then txtturno.Text = Cells(fila, 7) Cells(fila, 7) = turno encontrada = "encontrada" End If fila = fila + 1 Loop If encontrada = "no encontrada" Then MsgBox "Operario no encontrado", vbInformation + vbOKOnly, "buscar" End If Lo que pretendo con este código es que me encuentre el operario en la lista y coja el turno al que pertenece, por que en función del turno al que pertenezca irá a buscar en otra hoja un calendario donde me contará los días de fiesta de la siguiente forma: '----------------------------------------------------------------- Application.ScreenUpdating = False 'celda = ActiveCell.Address turno = ActiveCell.Address For i = 1 To 4999 If InStr(UCase(ActiveCell), "F") <> 0 Then contador = contador + 1 ActiveCell.Offset(1, 0).Select If contador = "" Then contador = 0 Range("W1") = "Se ha encontrado " & contador & " veces, la palabra: " & palabra_a_buscar Next Range(turno).Select Application.ScreenUpdating = True End Sub El problema que tengo es que a veces encuentra el operario pero no selecciona correctamente el rango de la hoja calendario y en otras ocasiones no encuentra el operario cuando de hecho si está en la lista de datos. |
|
#2
| |||
| |||
| Cita:
esto es de un ejempo que subí al foro,debes adaptarlo Código: Sub busca()
Set dato = ActiveSheet.[a2:A25].Find([d9], LookIn:=xlValues)
If dato Is Nothing Then
MsgBox "La fecha no se encuentra en la lista"
Else
MsgBox "Fecha localizada en: " & dato.Address: dato.Select
dato.Interior.ColorIndex = [d7].Value
End If
End Sub 1.-el rango e busqueda.-en mi caso fué A2:A25 de la hoja activa 2.-d9 por cmboperario los mensajes 1 y2 : MsgBox "el operario no se encuentra en la lista" MsgBox "Operario localizado en: " & dato.Address: dato.Select tambien: dato.Interior.ColorIndex = [d7].Value por: Msgbox "El operario " & dato & " esta en el turno " & dato.offset(0,1).value o bien por su variable turno=dato.offset(0,1) Msgbox "El operario " & dato & " esta en el turno " & turno pero entonces el 2º msgbox saldria sobrando ,solo dejar la parte donde selecciona es decir dato.Select recordé que tengo unos ejemplos que +/- se asemejan a lo que quieres enlace1 ejemplo1 enlace2 ejemplo2 enlace3 ejemplo3
__________________ Salu2 ST Última edición por ST_ fecha: 19/10/08 a las 06:12:16. |
|
#4
| |||
| |||
| Hola ST_, He solucionado el problema. Dejo el código en el foro. Private Sub btnaceptar_Click() Dim turno$ Dim fila As Long Dim encontrada$ Dim operario As String Worksheets("DATOS").Activate encontrada = "no encontrada" fila = 6 turno = Cells(fila, 2) operario = Cells(fila, 1) Do While Cells(fila, 1) <> Empty If UCase(ActiveSheet.Cells(fila, 1)) = UCase(cmboperario) Then turno = Cells(fila, 2) operario = Cells(fila, 1) encontrada = "encontrada" End If fila = fila + 1 Loop If encontrada = "no encontrada" Then MsgBox "Operario no encontrado", vbInformation + vbOKOnly, "buscar" Worksheets("CALENDARIO").Activate Worksheets("CALENDARIO").Range("W1").ClearContents Exit Sub End If '---------------------------------------------------------------- Worksheets("CALENDARIO").Activate If turno = "A" Then Range("C2").Select End If If turno = "B" Then Range("D2").Select End If If turno = "C" Then Range("E2").Select End If If turno = "D" Then Range("F2").Select End If If turno = "E" Then Range("G2").Select End If '----------------------------------------------------------------- Application.ScreenUpdating = False celda = ActiveCell.Address For i = 1 To 4999 If InStr(UCase(ActiveCell), "D") <> 0 Then contador = contador + 1 If InStr(UCase(ActiveCell), "V") <> 0 Then contador = contador + 1 If InStr(UCase(ActiveCell), "F") <> 0 Then contador = contador + 1 ActiveCell.Offset(1, 0).Select If contador = "" Then contador = 0 Range("W1") = "El operario " & operario & " tiene " & contador & " dias de vacaciones " Next Range(celda).Select Application.ScreenUpdating = True End Sub |
| Herramientas | |
| Desplegado | |
| |