Abreviacion de codigo

Hola Cmera :
He desarrollado, un proceso para Insertar fotografías he utilizado SELECT CASE, el cual he utilizado en 80 ocasiones creo son hacen demasiadas, me gustaría utilizar algo parecido que necesitara menos código, el código que tengo es el siguiente.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'-----------------------------------------
On Error GoTo Controlerror
If Target.Column = 1 Then
ActiveCell.Offset(, 2).Select
Application.ScreenUpdating = False
Select Case Target.Value
Case "CN 15951"
ActiveSheet.Pictures.Insert("C:\Images\CN 15951.jpg"). _
Select
ActiveCell.Offset(1, -2).Select
Case "CN 15958"
ActiveSheet.Pictures.Insert("C:\Images\CN 15958.jpg"). _
Select
ActiveCell.Offset(1, -2).Select
Case "CN 1G349"
ActiveSheet.Pictures.Insert("C:\Images\CN 1G349.jpg"). _
Select
ActiveCell.Offset(1, -2).Select
Case "CN 1G350"
ActiveSheet.Pictures.Insert("C:\Images\CN 1G350.jpg"). _
Select
ActiveCell.Offset(1, -2).Select
Case "CN 1H945"
ActiveSheet.Pictures.Insert("C:\Images\ CN 1H945.jpg"). _
Select
ActiveCell.Offset(1, -2).Select
Aqui tengo otros 80 casos como este
..
..
Case ""
Application.EnableEvents = False
Range("a2").Select
End Select
End If
Controlerror:
Application.EnableEvents = True
Application.ScreenUpdating = False
End Sub
En teoría este código funciona muy bien pero el problemas es que son demasiados casos y para mantenerlo al día y son demasiados movimientos de altas y bajas de productos.
Me gustaría me indicarías que código tengo que utilizar para no utilizar CASE.. Pero que haga exactamente lo mismo.
Habrás notado que el nombre de celda es igual al nombre de la imagen + jpg.
Tengo entendido que se puede hacer la instrucción While-Wend. Pero no se como armar el ciclo.
Seria posible utilizar una variable para la ruta de las imágenes
Por la atención que preste a mi correo mil gracias..
Jose Medina Maciel
Respuesta
1
Interesante tu código, antes de dar la respuesta haré algunas observacines y sugerencias que espero no te molesten.
La primera es que sin querer hiciste un procedimiento recursivo (se llama a sí mismo) que se ejecuta tantas veces como imágenes insertes, eso lo hace un poco más lento y ocupa más memoria, aunque posiblemente eso para los ojos del usuario es imperceptible es mejor no sobreutilizar recursos en la medida de lo posible.
El otro asunto es que no se como haces para administrar la hoja de excel pues cada vez que seleccionas la columna 1 se ejecuta el código, eso debe ser molesto para ti pues estás obligado a estar activando y desactivando los eventos manualmente cuando le haces modificaciones al archivo, para esto sugiero que actives la macro con un botón que puedes dejar fijo en las primeras filas para que siempre esté visible.
Bueno, eso es todo espero no haber sido cansón.. ahora si a lo que vinimos, claro que puedes manejar una variable con la ruta de las imágenes para no repetir tanto código innecesariamente, prueba con este código, le haces las modificaciones que necesites y si no entiendes algo por favor pregunta que con gusto aclaro o extiendo la explicación.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'-----------------------------------------
On Error GoTo Controlerror
Dim Ruta As String
Dim Archivo As String
If Target.Column = 1 Then
Application.EnableEvents = False
Application.ScreenUpdating = False
Ruta = "C:\Documents and Settings\All Users\Documentos\Mis imágenes\Cesar\Humor\"
'Ruta de las imágenes, en tu caso C:\Images\
ActiveCell.Offset(0, 2).Select
'Ubica el cursor en la columna 3
Do While ActiveCell.Offset(0, -2).Value <> ""
'Ciclo que se ejecuta mientras encuentre valores en la primera columna
'Termina cuando la celda de la primera columna está vacía
Archivo = Ruta & ActiveCell.Offset(0, -2).Value & ".gif" 'no tenía jpg para las pruebas
'Variable que almacena la ruta, el nombre y la ext del archivo
ActiveSheet.Pictures.Insert(Archivo).Select
ActiveCell.Offset(1, 0).Select 'Avanza una fila cada vez hasta el final
Loop
Controlerror:
Range("A2").Select
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End Sub
Al escribir esto me caí en la cuenta que el control de errores lo dejé para enviar siempre a A2... ¿eso no era lo que querías verdad?
Me cuentas.
Cordialmente,
cmera
He recibido tu respuesta, y como bien dices tengo algunas incongruencias en mi código, ya puse a funcionar tu sugerencia y funciona a la perfección
Y sin tanto código.
Recibe un fuerte abrazo
Jose Medina maciel

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas