Error ´13´ en tiempo de ejecución: No coinciden los tipos.

Resulta que la macro que a continuación voy a pegar ya la venia utilizando hace un tiempo en un documento pues me funcionaba bien. Hace unos días descubrí que se pueden ejecutar varias macros en una sola cuando se escribe Call ... Y la macros en cuestión está entre ellas.

Nunca me había molestado. No he cambiado de computador, no me han cambiado el office, no le hecho nada al documento más que ejecutar varias macros con un solo botón y me sale ahora el error del título.

La macros en cuestión es:

Dim Celda As Range, UltFila As Long
UltFila = Range("n" & Rows.Count).End(xlUp).Row
For Each Celda In Range("B2:n" & UltFila)
If (Celda.Value = "") Then Celda.ClearContents
Next Celda 

Cuando le digo "depurar" excel me resalta la sección que está en negrita y en cursiva. Le he cambiado "celda" por "cell", le he quitado los paréntesis, he cambiado las comillas por 0, he partido la oración en el then y no funciona... Auxilio!

2 Respuestas

Respuesta
2

.18/10/16

Buenas tardes, Sebastián

Aquel suele ser un error de compatibilidad en la comparación de argumentos.

Desde luego, dependerá de qué tienes en ese rango (textos, valores, fórmulas, etc.)

Imagino que será una fórmula porque no tendría sentido que vacíes una celda que tenga "" en ella.

Prueba reemplazando :

If (Celda.Value = "") Then Celda.ClearContents

por 

If Len(Celda) = 0 Then Celda.ClearContents

Los paréntesis no son necesarios

Luego me dirás si te funcionó

Saludos

Fernando

.

Fejoal, buenas noches y gracias por tu oportuna respuesta.

Lo modifique tal cual y me dice lo mismo señalando en amarillo esta vez if len (celda) = 0 Then. Haber de pronto me faltó explicar detalles.

ESte documento es una cotización, lo que hace es copiar los valores y pegarlos en otra Hoja, Pero como no siempre se hacen las cotizaciones llenando todos los espacios, lo que hace es que después de pegarlos mira cual es el último registro y a partir de este borra las celdas hacia abajo que no contengan datos (sería chevere que también borrara las que tienen cero). Esta es la idea.

Las celdas donde aparecen los datos están condicionadas: si aparece una referencia aparece tal valor, si no "". Ojala se pueda solucionar. Gracias,

.

Es sumamente extraño que no funcione.

Me inclino a pensar que no es la rutina sino algo en tu hoja.

Vamos a intertar identificar dónde está el conflicto.

Esta variante de tu rutina, elimina aquellas celdas con vacío o con cero (como pedías). En mi equipo lo hace sin problemas.

Pero para ver qué está provocando el problema en la tuya, te mostrará un mensaje y la ubicación de la celda problemática (tal vez este combinada, o algo así)

Utiliza entonces esta variante:

Sub BorraVac()
Dim Celda As Range, UltFila As Long
UltFila = Range("N" & Rows.Count).End(xlUp).Row
For Each Celda In Range("B2:N" & UltFila)
On Error Resume Next
If Celda.Value = "" Or Celda.Value = 0 Then Celda.ClearContents
If Err.Number > 0 Then MsgBox "Error: " & Err.Description & Chr(10) _
& "en la celda: " & Celda.Address & Chr(10) _
& "que contiene: " & Celda.Value, vbCritical, "DESCRIPCION DEL ERROR Y LOCALIZACION"
Err.Clear
On Error GoTo 0
Next Celda
End Sub

Toma nota del error, vé a la celda que indica y verifica qué tiene dentro.

Luego me comentas qué informó.

Un abrazo

Fer

.

Respuesta
2

Puede ser que en alguna de las celdas tengas un error de este tipo :

#¿NOMBRE? #¡VALOR! #¡NUM! #¡DIV/0! #¡REF! #¡NULO! #N/A

Si es así, corrige el error de la celda modificando la fórmula, o bien, actualiza la macro de esta forma:

    Dim Celda As Range, UltFila As Long
    UltFila = Range("n" & Rows.Count).End(xlUp).Row
    For Each Celda In Range("B2:n" & UltFila)
        If Not IsError(Celda) Then
            If Celda.Value = "" Then Celda.ClearContents
        End If
    Next Celda
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Dante Amor, buenas noches y gracias por tu oportuna respuesta. 

Lo modifique tal cual y me dice lo siguiente: "Error de compilación: Next sin for" y señala justo el Next antes de End Sub. Haber depronto me faltó explicar detalles. 

ESte documento es una cotización, lo que hace es copiar los valores y pegarlos en otra Hoja, Pero como no siempre se hacen las cotizaciones llenando tooodos los espacios, lo que hace es que despues de pegarlos mira cual es el último registro y a partir de este borra las celdas hacia abajo que no contengan datos (sería chevere que también borrara las que tienen cero). esta es la idea. 

Las celdas donde aparecen los datos están condicionadas: si aparece una referencia aparece tal valor, si no "". Ojala se pueda solucionar. Gracias, 

Pon la macro completa para revisar todo el código, el error de compilación es porque te falta una instrucción.

Si revisas con cuidado lo que te entregué y lo copias tal cual no debes tener problemas, pero si te falta alguna instrucción, tengo que revisar cómo dejaste la macro.

Si quieres puedo corregir tu macro, pero tendría que ver tu archivo, ya que tu condición dice: si la celda es "" entonces limpia la celda, ¿pero si la celda es igual a "" entonces qué caso tiene limpiarla?

Envíame tu archivo

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Sebastian Amaya” y el título de esta pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas