Error 13 en tiempo de ejec. Tipo no coincide

Soy nuevo en esto de las macros, y me ha surgido el siguiente problema: Tengo un libro de excel, y en la 1ª hoja en el editor de visual basic he escrito el siguiente código, como me sugirió en su día un compañero de Todoexpertos.
***********
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$A$1" And Target.Value = 2 Then
MsgBox "Es un 2 en A1"
macro1
End If
End Sub
***********
El programa en un principio va bien; si pongo un 2 en la celda "A1" se ejecuta la macro, pero si modifico una de las otras celdas de la hoja de cálculo (introduzco texto o modifico algún dato) aparece el siguiente error:
Se ha producido el error 13 en tiempo de ejecución, el tipo no coincide ¿A qué es debido este error, y cómo lo puedo solucionar?

2 respuestas

Respuesta
1
No entiendo muy bien que quieres hacer con el código. El error te lo devuelve debido a que cuando la celda que modificas es un texto, te da un error de tipos en la sentencia
Target.Value = 2
Prueba con lo siguiente, para que no te aparezca el error
***********
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$A$1" then
if Target.Value = 2 Then
MsgBox "Es un 2 en A1"
macro1
End if
End If
End Sub
***********
El error te volverá a aparecer si introduces una cadena de texto en la celda A1
Podrías utilizar la función
IsNumeric(expression) as boolean
Para ver si se trata de un número, si no es así avisa con un messagebox.
Respuesta
1
La macro provista, controla ante cualquier cambio en la hoja, si cambió la celda A1 y si su contenido es un dos.
Ambos controles los efectúa en un solo ciclo, por lo cual si alguno da error falla el procedimiento. Por ejemplo, si en A1 tuvieses un texto.
Para evitar cualquier tipo de mensaje de error en este código, personalmente lo estructuraría así:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$A$1" Then
'Cambia la celda A1?
If Application.WorksheetFunction.IsNumber(Target) Then
'Su contenido es un número?
If Target.Value = 2 Then
'El valor es igual a dos?
MsgBox "Es un 2 en A1"
macro1 ' no sé qué hace...
End If
End If
End If
End Sub
Las explicaciones están incluidas en el código...
Independientemente del contenido de A1, esta macro funciona OK.
Esto debería resolver tu pregunta. Si así fuera, agradeceré un comentario y que la finalices.
Si no, pregúntame de nuevo.
Un abrazo!
Fernando
*====================================*
(Considera que la valoración que figura predeterminada
es 3/5. Tal vez quieras cambiarla...)
En caso contrario, puedes preguntarme nuevamente
aclarando qué entendí mal o qué faltó.
Ante todo muchas gracias Fernando por haberte tomado tu tiempo para ayudarme. Tu respuesta ha solucionado mi problema, y he aprendido un poco más.
Saludos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas