Dividir macro en exel debido a error de longitud

Me estoy iniciando en el mundo de las macros.

He creado un muy sencilla con la que puedo visualizar una imagen dependiendo del campo que escriba en una celda, que actuaría de buscador.

El problema es que si excedo un determinado número de sentencias, me da un problema de longitud.

¿Podría solucionar esto dividiendo de alguna manera esa macro?

Este es el comando principal:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$C$5" Then
If Sheet2.Range(Target.Address) = "(500) días juntos" Then Sheet2.Image1.Picture = LoadPicture("c:\users\alberto\pictures\películas\_500__d_as_juntos_0.jpg")
If Sheet2.Range(Target.Address) = "12 monos" Then Sheet2.Image1.Picture = LoadPicture("c:\users\alberto\pictures\películas\12_monos_0.jpg")
If Sheet2.Range(Target.Address) = "127 horas" Then Sheet2.Image1.Picture = LoadPicture("c:\users\alberto\pictures\películas\127_horas_0.jpg")
If Sheet2.Range(Target.Address) = "20 million miles to earth" Then Sheet2.Image1.Picture = LoadPicture("c:\users\alberto\pictures\películas\20_million_miles_to_earth_0.jpg")
If Sheet2.Range(Target.Address) = "21 gramos" Then Sheet2.Image1.Picture = LoadPicture("c:\users\alberto\pictures\películas\21_gramos_0.jpg")

Esta misma sentencia se repite unas 1000 veces. Y creo que necesitaría dividirla en rangos de 300 sentencias por parte. Pero no sé qué comando utilizar.

2 Respuestas

Respuesta
2

Evidentemente hay un error porque no es posible que suceda esto.

A simple vista, una idea para mejorarla es utilizando la sentencia:

Select case xxx  ... End Select

Fijate si tengo algún ejemplo en la sección Macros de mi sitio o me consultas nuevamente.

Ajustando solo algunas líneas de tu macro, lo primero es impedir que excel 'revise' hasta el final para encontrar la salida cuando el cambio no es en C5. Observa la primer instrucción como debiera quedar (al final debes quitar un End If).

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address <> "$C$5" Then Exit sub

Luego un ejemplo de Select sería:

Select Case Sheet2.Range(Target.Address)

Case is = "(500) días juntos"

dire  = "c:\users\alberto\pictures\películas\_500__d_as_juntos_0.jpg"

Case is = "12 monos"
dire = "c:\users\alberto\pictures\películas\12_monos_0.jpg"

'repetir todas las opciones 

End Select

Al final te quedará 1 sola instrucción para asignar a la imagen la dirección dejada en la variable 'dire'

Sdos

Elsa

PD) Podés encontrar más ejemplos en la guia 'Bucles', en sección Ejemplos y en nuevo manual 500Macros

Respuesta
2

Puedes crear una hoja llamada "Catalogo"

En la columna "A" escribe el nombre de la película y en la columna "B" pon la ubicación de la imagen.


Entonces, si tienes tu catálogo de nombres y ubicación en la hoja "Catalogo", el código sería este:

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Target.Address = "$C$5" Then
        Set b = Sheets("Catalogo").Columns("A").Find(Target.Value, lookat:=xlWhole)
        If Not b Is Nothing Then
            Sheet2.Image1.Picture = LoadPicture(b.Offset(0, 1))
        Else
            Sheet2.Image1.Picture = Nothing
            MsgBox "No existe la imagen"
        End If
    End If
End Sub

Saludos.Dante Amor

¡Gracias! 

Una solución perfecta.

Una fórmula mucho más sencilla que me habría ahorrado muchísimo trabajo (y me ahorrará en un futuro)

Mil gracias!! Además elimina el problema de que antes la búsqueda era sensible a mayúsculas y ahora no.

Genial!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas