Ya vimos varias entradas sobre el manejo de imágenes desde Excel, tanto con macros como sin ellas. Pero el tema siempre da para mas: me plantean un interrogante que hasta el momento no tratamos: mi lector necesita colocar 40 imágenes en una hoja de cálculos, cada una de ellas dentro de un control independiente.
La tarea nos insumirá un par de líneas de código en VBA, debiendo prestar atención a ciertos "requisitos" para que esto funcione correctamente.
estoy un poco vago y cargué solo 6, pero el procedimiento que llevaremos a cabo nos permitirá insertar la cantidad de imágenes que necesitemos.
[+/-] Ver el resto / OcultarContinuando con la misma lógica que la aplicada en los posts anteriores, el nombre de cada imagen será "autoincremental", de esta forma: "Imagen1.jpg", "Imagen2.jpg", "Imagen3.jpg".........., "Imagen40.jpg", para que así nos sea posible ubicarlas en el mismo directorio, a través de un sencillo bucle For.... Next, resultando a la vez sencillo modificar el código, por si el día de mañana necesitamos colocar 100, 30 o 500 imágenes.
Cabe aclarar que no es necesario que la extensión sea si o si "jpg", dado que podemos cambiarla por cualquier otro formato soportado por Excel (como .png, por ejemplo).
Sigamos. La metodología será: inserto una autoforma (shape), definiendo en ese mismo momento su ancho, alto, posición X y posición Y (estos dos últimos respecto de la hoja). Estos son los 4 argumentos que se observan entre paréntesis:
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 10, 10, 100, 100)
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 10, 10, 100, 100)
la instrucción de arriba nos coloca un rectángulo, a 10 unidades a la izquierda del borde de la hoja, 10 unidades a la parte superior y es bien cuadrada: 100 unidades de ancho x 100 unidades de alto.
O sea que ya tenemos otra cosa para tener en cuenta: si a esta rutina de colocar 40 imágenes la automatizamos mediante macros, habrá que ver bien el tema de la posición, ya que deberá ir variando cada vez que insertemos una, para evitar que queden encimadas. Entonces, los dos primeros argumentos serán variables.
Luego del paso anterior, relleno la autoforma con una imagen, pasando: directorio en donde se encuentra + nombre de archivo + extención; por ejemplo: C:\Mis Documentos\Imagenes\Imagen1.jpg
Como se trata de un bucle, y a los fines de facilitar el trabajo, ese "1" del nombre de la imagen deberá ser autoincremental, y ahí colocaremos una variable que lleve a cabo tal objetivo:
"C:\Mis Documentos\Imagenes\Imagen" & Variable & ".jpg"
en donde Variable irá incrementado su valor en 1 en cada ciclo de nuestro bucle.
Y bueno.... todo lo anteriormente mencionado, repetirlo (para este ejemplo) 40 veces.
Veamos el código:
Eso es todo.
Estimo que hay que recalcar un par de cosas:
1) cada imagen tiene 100 x 100 unidades de ancho y alto, formando un cuadrado. A la posición izquierda (variable PosX) la voy aumentando de a 110 unidades, para respetar el mismo margen entre ellas. Cuando hay 5 imágenes "en fila", también aumento a PosY (posición vertical), para que la próxima hilera de imágenes no "pise" a la anterior.
2) dado lo apuntado en el ítem anterior, si cambiamos el ancho y alto, por ejemplo a 150, también deberemos cambiar los márgenes (PosX / PosY) para que todo quede bien ordenado.
3) En donde dice "If j= 6 then" es la parte en la cual defino la cantidad de imágenes x fila. Aumentaremos o disminuiremos ese valor si queremos colocar mas o menos autoformas.
4) dentro de la variable CantFotos guardo cuantas imágenes cargo en la hoja.... si cambiamos esto, será sencillo personalizar nuestro proyecto.
Aquí les dejo el link al archivo.
Una vez mas, muchas gracias por todos los mensajes que a diario recibo en mi casilla de correo.
O sea que ya tenemos otra cosa para tener en cuenta: si a esta rutina de colocar 40 imágenes la automatizamos mediante macros, habrá que ver bien el tema de la posición, ya que deberá ir variando cada vez que insertemos una, para evitar que queden encimadas. Entonces, los dos primeros argumentos serán variables.
Luego del paso anterior, relleno la autoforma con una imagen, pasando: directorio en donde se encuentra + nombre de archivo + extención; por ejemplo: C:\Mis Documentos\Imagenes\Imagen1.jpg
Como se trata de un bucle, y a los fines de facilitar el trabajo, ese "1" del nombre de la imagen deberá ser autoincremental, y ahí colocaremos una variable que lleve a cabo tal objetivo:
"C:\Mis Documentos\Imagenes\Imagen" & Variable & ".jpg"
en donde Variable irá incrementado su valor en 1 en cada ciclo de nuestro bucle.
Y bueno.... todo lo anteriormente mencionado, repetirlo (para este ejemplo) 40 veces.
Veamos el código:
Sub Insertar40Imagenes() Dim PosX, PosY, X, J As Integer Dim CantFotos As Integer Dim Ruta As String 'le asigno valores a las variables, mismas que dependerán 'de cada proyecto: 'ruta de acceso a las imágenes Ruta = "C:\Users\damian\Pictures\" 'cantidad de imágenes a cargar: CantFotos = 40 'margen izquierdo y superior que separará a cada imagen: PosX = 10 PosY = 10 J = 1 'si existe alguna autoforma la elimino: If ActiveSheet.DrawingObjects.Count > 0 Then ActiveSheet.DrawingObjects.Select Selection.Delete End If 'y cargo las 40 que se encuentran en el directorio: For X = 1 To CantFotos 'este If es para asignar nuevos valores a las 'variables y hacer que aparezcan 5 imágenes x fila: If J = 6 Then PosX = 10 PosY = PosY + 110 J = 1 End If 'inserto una autoforma y como margen izq. y superior le paso las 'varibles. como valor fijo de ancho y alto coloco 100 unidades ActiveSheet.Shapes.AddShape(msoShapeRectangle, PosX, PosY, 100, 100). _ Select 'aquí le indico que cargue la imagen, usando la variable Ruta y 'concatenando el número (x) con la extensión (.jpg) On Error Resume Next Selection.ShapeRange.Fill.UserPicture _ Ruta & "Imagen" & X & ".jpg" If Err.Number <> 0 Then MsgBox "No se encontró una de las imágenes, por favor " _ & " revise el directorio", vbCritical, "Error" Err.Clear Exit Sub End If 'incremento el margen izquierdo y a J PosX = PosX + 110 J = J + 1 Next X Range("a1").Select End Sub
Eso es todo.
Estimo que hay que recalcar un par de cosas:
1) cada imagen tiene 100 x 100 unidades de ancho y alto, formando un cuadrado. A la posición izquierda (variable PosX) la voy aumentando de a 110 unidades, para respetar el mismo margen entre ellas. Cuando hay 5 imágenes "en fila", también aumento a PosY (posición vertical), para que la próxima hilera de imágenes no "pise" a la anterior.
2) dado lo apuntado en el ítem anterior, si cambiamos el ancho y alto, por ejemplo a 150, también deberemos cambiar los márgenes (PosX / PosY) para que todo quede bien ordenado.
3) En donde dice "If j= 6 then" es la parte en la cual defino la cantidad de imágenes x fila. Aumentaremos o disminuiremos ese valor si queremos colocar mas o menos autoformas.
4) dentro de la variable CantFotos guardo cuantas imágenes cargo en la hoja.... si cambiamos esto, será sencillo personalizar nuestro proyecto.
Aquí les dejo el link al archivo.
Una vez mas, muchas gracias por todos los mensajes que a diario recibo en mi casilla de correo.
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Etiquetas
Macros
Etiquetas:
Macros
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Comentarios
Publicar un comentario