Macro de búsqueda en Excel con más de 100 preguntas.

Hola: Buen día.

Anteriormente me ayudaron con esta pregunta... Buscar en Excel una doble coincidencia exacta con valores repetidos

Sin embargo al momento de intentar adecuarlo a mi exacta cantidad de usuarios surgió el problema de que el archivo me maraca error alrededor de la fila 100 con el usuario Miguel. 

Me marca error como si la sala estuviera ocupada aunque no lo esté, así como pasada cierta fila deja de insertarlo donde es debido y lo coloca en el rango "correspondiente" a la fila 100. No se si me pudiera ayudar a ubicar y corregir el error.

Acabo de subir el archivo a Dropbox en la siguiente dirección ya que no puedo ingresar solo el código fuente (dice que el texto es muy largo): https://www.dropbox.com/s/8lib88vvb0mp1p7/HORARIOS%20dam1.xlsm 

Espero puedan ayudarme. Gracias.

1 respuesta

Respuesta
2

Te envié el archivo con la macro actualizada.

La macro resuelve si aumentas horarios, usuarios o salas.

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.DAM
    u = Range("A" & Rows.Count).End(xlUp).Row
    If Not Intersect(Target, Range("C2:G" & u)) Is Nothing Then
        Set h1 = Sheets("SALAS")
        Set r = h1.Cells
        Set b = r.Find("sala", lookat:=xlPart)
        If Not b Is Nothing Then
            ncell = b.Address
            Do
                h1.Range(h1.Cells(b.Row + 2, b.Column + 1), h1.Cells(b.Row + 9, b.Column + 5)).ClearContents
                Set b = r.FindNext(b)
            Loop While Not b Is Nothing And b.Address <> ncell
        End If
        existe = False
        For Each c In Range("C2:G" & u)
            sal = c.Value
            hor = Cells(c.Row, "B")
            usu = Cells(c.Row, "A")
            col = c.Column - 2
            If sal <> "" Then
                Set b = h1.Cells.Find(sal, lookat:=xlWhole)
                If Not b Is Nothing Then
                    n = 2
                    Do While True
                        If h1.Cells(b.Row + n, b.Column) = "" Then
                            f = 0
                            Exit Do
                        ElseIf h1.Cells(b.Row + n, b.Column) = hor Then
                            f = b.Row + n
                            Exit Do
                        End If
                        n = n + 1
                    Loop
                    If f > 0 Then
                        If h1.Cells(f, b.Column + col) = "" Then
                            h1.Cells(f, b.Column + col) = usu
                        Else
                            h1.Cells(f, b.Column + col) = "¡ E R R O R !"
                            existe = True
                        End If
                    Else
                        MsgBox "El horario no existe", vbCritical, "SALAS"
                        Target.Select
                    End If
                Else
                    MsgBox "La sala no es correcta", vbCritical, "SALAS"
                    Target.Select
                End If
            End If
        Next
        If existe Then
            MsgBox "La sala ya está ocupada", vbCritical, "SALAS"
            Target.Select
        End If
    End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas