es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Declaración “If” en VBA con múltiples acciones cuando es verdadera

He intentado leer posibles soluciones en otros mensajes en este foro, pero no tengo suerte. Esto parece ser una acción simple, pero no estoy haciendo ningún progreso.

Tengo el código siguiente que quiero revisar cada fila en una hoja de cálculo, si el valor en la columna D es mayor que una cantidad establecida para borrar el contenido en las celdas de la misma fila más adelante.

Sub LimpiarDatos()

    Dim miUltimaFila As Long
    Dim i As Long

    ' Encontrar la última fila
    miUltimaFila = Cells(Rows.Count, "C").End(xlUp).Row

    ' Recorrer el rango y borrar datos en las celdas especificadas si se cumple la condición
    For i = 2 To miUltimaFila
        If Cells(i, "D").Value >= 365 Then
            Cells(i, "Z").ClearContents
            Cells(i, "AB").ClearContents
        End If
    Next i

End Sub

El mensaje de error que sigo recibiendo es “error de tiempo de ejecución ’13’ – Coincidencia de tipos”.

Agradecería cualquier ayuda.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “run time error ’13’ – Type mismatch” generalmente significa que hay una incompatibilidad entre los tipos de datos utilizados en tu código. En este caso, es probable que el valor en la columna D no esté siendo reconocido como un número y el código no pueda compararlo con el valor 365.

    Para solucionar esto, puedes intentar convertir explícitamente el valor en la columna D a un número antes de realizar la comparación. Puedes hacer esto utilizando la función Val, que convierte una cadena en un número. Aquí tienes una versión actualizada de tu código con esta modificación:

    Sub ClearData()
    
        Dim myLastRow As Long
        Dim i As Long
    
    'Encuentra la última fila
        myLastRow = Cells(Rows.Count, "C").End(xlUp).Row
    
    'Recorre el rango y borra los datos en las celdas especificadas si se cumple la condición
        For i = 2 To myLastRow
            If Val(Cells(i, "D").Value) >= 365 Then
                Cells(i, "Z").ClearContents
                Cells(i, "AB").ClearContents
            End If
        Next i
    
    End Sub
    

    Ten en cuenta que utilicé la función Val alrededor de la expresión Cells(i, “D”).Value para convertir el valor a un número. Esto debería solucionar el error de incompatibilidad de tipos.

Comments are closed.