Excel 2007, Como insertar imágenes en serie, ajustándolas en celdas, usando GetOpenFilename

Nuevamente molestándolos, encontré esta respuesta relacionada a mi problema y estoy tratando de ajustarla a mi necesidad pero tengo problemas para combinar las instrucciones:

Sub fotos()
fichero = Application.GetOpenFilename
If fichero = False Then Exit Sub
tope = Range("c3").Top
izq = Range("c3").Left
alto = Range("c3").Height
ancho = Range("c3").Width
ActiveSheet.Pictures.Insert(fichero).Select
w = Selection.Width
h = Selection.Height
Selection.ShapeRange.Top = tope
Selection.ShapeRange.Left = izq
Selection.ShapeRange.Height = alto
Selection.ShapeRange.Width = ancho
End Sub

Mi pregunta original es:

Espero me puedan ayudar,
tengo el siguiente macro que rellena figuras predefinidas en un archivo excel
2007 con imágenes generadas en una carpeta del equipo, funciona bastante bien
con imágenes una a una, sin embargo, quisiera completarlo con un bucle o algo
así en virtud de que siempre insertamos series de tres imágenes y quisiera
ahorrar un poco de tiempo, ya que procesamos una gran cantidad de imágenes todo
el día.
Dim ruta As String
ruta=Application.GetOpenFilename
On Error Resume Next
With Selection.Shaperange.Fill
.Visible=msoTrue
.UserPicture
ruta
.TextureTile=msoFalse
End
With
End
Sub

En adición les comento que cada vez que inserto una serie de tres imágenes, ejecuto un macro para generar filas, quisiera no tener que dar la ruta de acceso a la carpeta de imágenes cada vez que corro la macro para insertar nueva serie de imágenes,

1 respuesta

Respuesta
1

No entendí tus comentarios que me enviaste, en la macro que pusiste como ejemplo o en la macro que te envié, en ambas tienes que decir el directorio o ruta dónde se encuentran las imágenes, puedo poner por default un directorio, pero me tienes que decir cuál.

En la función que te envié, puedes seleccionar varios archivos a la vez, solamente presiona la tecla Ctrl y después click con el mouse al archivo y te va eligiendo varios archivos, presiona Aceptar y te va a incluir todas tus imágenes que seleccionaste en excel.

Lo que no me dijiste, es que querías un tamaño específico en cada imagen y tampoco me has dicho en qué celdas se van a poner cada una de las imágenes.

Disculpa Dam, estuve todo el día en otras actividades, el planteamiento es el siguiente, en un libro de excel tengo que capturar series de tres imágenes que provienen de distintas carpetas generadas en la unidad C:/../..x,y,z; al capturarlas deben quedar alineadas y del mismo tamaño para que se vea uniforme al presentarlas ó imprimirlas, hice un macro que inserta dos filas cada que agrego otra serie de tres imágenes (una fila para comentarios y otra fila con celdas y figuras para ajustar los tamaños de las imágenes). originalmente estas filas agregadas contenían figuras para rellenarlas con las imágenes, realmente me es indiferente si ajusto en celdas ó figuras estas imágenes, lo que realmente me interesa es que pueda insertar las tres imágenes a la vez para ahorrar tiempo ya que cada serie de tres imágenes siempre viene de la misma carpeta y la siguiente serie puede provenir de otra de las carpetas pero siempre de tres en tres, espero que me puedas proporcionar tu valiosa y sabia ayuda.

Con la siguiente macro insertas 3 imágenes.

Sub imagen()
'Insertar 3 imágenes
'Por.Dam
celdainicio = "c3"
fila = Range(celdainicio).Row
col = Range(celdainicio).Column
Cells(fila, col).Select
Rows(fila & ":" & fila + 1).Select
Selection.Insert Shift:=xlDown
Rows(fila + 1).Select
Selection.RowHeight = 115
        For i = 1 To 3
            Columns(col).Select
            Selection.ColumnWidth = 18
            wimagen = "foto" & i & ".jpg"
            carpeta = "C:\Documents and Settings\"
            Cells(fila + 1, col).Select
            ActiveSheet.Pictures.Insert(carpeta & wimagen).Select
            With Selection
                .Placement = xlMoveAndSize
                .PrintObject = True
            End With
            Selection.ShapeRange.LockAspectRatio = msoFalse
            Selection.ShapeRange.Height = 115#
            Selection.ShapeRange.Width = 99#
            Selection.ShapeRange.Rotation = 0#
            col = col + 1
        Next
End Sub

Indicaciones:

1. La carpeta de las imágenes dice:

carpeta = "C:\Documents and Settings\"

Puedes cambiar esta sentencia para leer la carpeta de una celda, así si cambias la carpeta, puedes cambiar la carpeta en la celda, por ejemplo

A B

1 C:\Documents and Settings\escritorio\

2

carpeta = range("B1")

Siempre deberás poner la carpeta y al final la diagonal \

2. Para leer los 3 archivos con las imágenes, los 3 nombres de las imágenes deberán tener un nombre distintivo para leerlas, por ejemplo, en la macro que te envío, las tres imágenes se llaman "foto1.jpg", "foto2.jpg" y "foto3.jpg", de esta forma podemos decirle a la macro que lea tres imágenes que empiecen con la palabra "foto" y que vaya buscándolas con un contador que inicia en 1 y cambia a 2 y luego a 3.

3. La macro tiene como referencia para iniciar la celda C3, a partir de esta celda inserta 2 filas, en la segunda fila ajusta el tamaño de la fila y también ajusta el tamaño de la columna C, D y E, para insertar las 3 imágenes y las deja del mismo tamaño

Revisa la macro y si quieres que le ajuste algo avisame.

Saludos. Dam

Muchas Gracias por tu comprensión y disponibilidad Dam, el macro está muy bien diseñado, sin embargo nos es necesario interactuar con la imagen, ya que teniendo abierta la carpeta con modo "iconos muy grandes", seleccionamos las tres fotos más representativas, de hecho, no cambiamos de carpeta hasta que vaciamos la anterior, por lo que no es necesario dar la ruta de acceso tan seguido, por otro lado, ¿como, sería la instrucción para que inicie en la celda activa? ya que al insertar filas ya las inserta del tamaño formateado y con su propio botón para insertar imagen desde la celda activa...ActiveCell.Offset(0,3).Range.("A1").Select...y luego las dimensiones de fila, por lo que la macro que necesito ya no requiere dimensionar la celda, nada más la imagen.

Espero te pueda servir lo siguiente:

¿Cómo, sería la instrucción para que inicie en la celda activa?

celdainicio = activecell

Y con lo siguiente dimensionas la imagen

ActiveSheet.Pictures.Insert(carpeta & wimagen).Select
With Selection
.Placement = xlMoveAndSize
.PrintObject = True
End With
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 115#
Selection.ShapeRange.Width = 99#
Selection.ShapeRange.Rotation = 0#

Cambia estas cantidades para el ancho y para lo alto

Selection.ShapeRange.Height = 115#
Selection.ShapeRange.Width = 99#

Saludos. Dam

Muchísimas gracias por tus conocimientos Dam, te comparto el Macro, quedo genial:

Sub Tres()
'
' Acceso directo: CTRL+t
' Por.Dam
' Inserta 3 imágenes
Dim vrtSelectedItem As Variant
celdainicio = ActiveCell.Offset(0, 3).Range("A1").Select
fila = ActiveCell.Row
col = ActiveCell.Column
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Seleccione una o varias fotos"
.Filters.Clear
.Filters.Add "AllFiles", "*.*"
.FilterIndex = 1
.AllowMultiSelect = True
.InitialFileName = ThisWorkbook.Path
If .Show Then
For Each vrtSelectedItem In .SelectedItems
Cells(fila, col).Select
ActiveSheet.Pictures.Insert(vrtSelectedItem).Select
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 107#
Selection.ShapeRange.Width = 155#
Selection.ShapeRange.Rotation = 0#
col = col + 2
Next
End If
End With
ActiveCell.Offset(-2, -6).Range("A1").Select
End Sub

Como un Plus, la serie tiene tres macros locales que generan un borde exterior en cada imagen (verde, amarillo ó rojo), sin embargo, el borde de celda más grueso queda casi imperceptible, ¿Sabes como seleccionar mediante instrucción de macro, las imágenes contenidas en un rango de celdas? esto para generarle un contorno de imagen de 3 puntos.

Gracias anticipadas

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas