Cómo insertar, mover y eliminar imágenes con VBA

Índice
  1. Adaptando el código a tus necesidades
  2. Insertar una imagen en una hoja de trabajo
  3. Nombres de imágenes
  4. Obtener propiedades de imagen
  5. Eliminar una imagen
  6. Hacer invisibles las imágenes
  7. Recorrer todas las imágenes en una hoja de trabajo
  8. Confirma si el objeto seleccionado es una imagen.
  9. Imágenes vinculadas
  10. Opciones de colocación y bloqueo de imágenes
  11. Rotar imágenes
  12. Establecer la posición de la imagen en el centro de una celda.
  13. Voltear una imagen horizontal o verticalmente
  14. Cambiar el tamaño de una imagen
  15. Recortar
  16. Cambiando el orden Z
  17. Establecer la imagen de fondo
  18. Guardar imagen desde Excel
  19. Conclusión

Si bien no es frecuente que tengamos que controlar fotografías o imágenes dentro de Excel, según la cantidad de búsquedas en Google sobre este tema, es claramente algo sobre lo que la gente quiere saber más. Esta publicación sirve como referencia para cubrir la mayoría de los escenarios que probablemente encontraremos al copiar, insertar, mover, eliminar y controlar imágenes.

Este código se puede usar junto con mi publicación sobre el uso de una función definida por el usuario para insertar y cambiar imágenes según el valor de una celda , que se puede encontrar aquí: https://exceloffthegrid.com/automatically-change-picture/

Tabla de contenido
  • Adaptando el código a tus necesidades
  • Insertar una imagen en una hoja de trabajo
  • Nombres de imágenes
  • Obtener propiedades de imagen
  • Eliminar una imagen
  • Hacer invisibles las imágenes
  • Recorrer todas las imágenes en una hoja de trabajo
  • Confirma si el objeto seleccionado es una imagen.
  • Imágenes vinculadas
  • Opciones de colocación y bloqueo de imágenes
  • Rotar imágenes
  • Establecer la posición de la imagen en el centro de una celda.
  • Voltear una imagen horizontal o verticalmente
  • Cambiar el tamaño de una imagen
  • Recortar
  • Cambiando el orden Z
  • Establecer la imagen de fondo

Descargue el archivo de ejemplo: únase al programa Insiders gratuito y obtenga acceso al archivo de ejemplo utilizado para esta publicación.

Nombre de archivo: 0042 VBA copiar, insertar, mover, eliminar imágenes.zip

Tener acceso

Adaptando el código a tus necesidades

Es poco probable que alguno de los códigos cumpla con sus requisitos exactos. Cada fragmento de código utiliza variables para contener la imagen, la hoja de trabajo, un rango o un objeto. Al cambiar esas variables, el código se puede cambiar y combinar fácilmente con otros fragmentos de código para cumplir con sus requisitos específicos.

Insertar una imagen en una hoja de trabajo

El siguiente código insertará una imagen en la celda activa de la hoja de trabajo activa, manteniendo el tamaño de la imagen original.

Sub InsertImage()Dim ws As WorksheetDim imagePath As StringDim imgLeft As DoubleDim imgTop As DoubleSet ws = ActiveSheetimagePath = "C:UsersmarksDocumentsmyImage.webp"imgLeft = ActiveCell.LeftimgTop = ActiveCell.Top'Width Height = -1 significa mantener el tamaño originalws.Shapes. AddPicture _ fileName:=imagePath, _ LinkToFile:=msoFalse, _ SaveWithDocument:=msoTrue, _ Left:=imgLeft, _ Top:=imgTop, _ Ancho:=-1, _ Alto:=-1 Fin Sub

Dependiendo de nuestras necesidades, puede ser mejor crear una imagen directamente en una variable de objeto. Luego podemos hacer referencia a la imagen usando la variable y no necesitamos saber el nombre de la imagen. El siguiente código es un ejemplo de esta técnica.

Sub InsertImageToDeclaredVariable()Dim myImage As ShapeDim ws As WorksheetDim imagePath As StringDim imgLeft As DoubleDim imgTop As DoubleSet ws = ActiveSheetimagePath = "C:UsersmarksDocumentsmyImage.webp"imgLeft = ActiveCell.LeftimgTop = ActiveCell.TopSet myImage = ws.Shapes.AddPicture( _ Filename :=imagePath, _ LinkToFile:=msoFalse, _ SaveWithDocument:=msoTrue, _ Left:=imgLeft, _ Top:=imgTop, _ Ancho:=-1, _ Alto:=-1)'Utilice la variable para el imageMsgBox creado miImagen.NombreEnd Sub

Nombres de imágenes

El siguiente código mostrará el nombre de la última imagen insertada.

El cuadro de mensaje es para ilustrar que el código funciona. Una vez que hayamos capturado la forma como un objeto en el mundo real, realizaríamos otras acciones sobre la forma.

Sub GetNameOfLastInsertedImage()Dim myImage As ShapeSet myImage = ActiveSheet.Shapes(ActiveSheet.Shapes.Count)MsgBox myImage.NameEnd Sub

El siguiente código cambia el nombre de una imagen existente.

Sub RenameImage()Dim myImage As ShapeDim ws As WorksheetSet ws = ActiveSheetSet myImage = ws.Shapes("Imagen 2")myImage.Name = "Nuevo nombre de imagen"End Sub

Obtener propiedades de imagen

El siguiente código demuestra cómo recuperar propiedades de imagen comunes.

Sub GetImageProperties()Dim myImage As ShapeDim ws As WorksheetSet ws = ActiveSheetSet myImage = ws.Shapes("Imagen 1")MsgBox "Arriba: " myImage.Top vbNewLine _ "Izquierda: " myImage.Left vbNewLine _ "Ancho: " myImage. Ancho vbNewLine _ "Alto: " myImage.Height vbNewLine _ "Orden Z: " myImage.ZOrderPosition vbNewLine _ "Nombre: " myImage.Name vbNewLine _ "Celda superior izquierda: " myImage.TopLeftCell vbNewLineEnd Sub

Eliminar una imagen

El siguiente código eliminará una imagen llamada Imagen 1 de la hoja de trabajo activa.

Sub DeleteImage()Dim myImage As ShapeDim ws As WorksheetSet ws = ActiveSheetSet myImage = ws.Shapes("Imagen 1")myImage.DeleteEnd Sub

Hacer invisibles las imágenes

Las imágenes se pueden hacer invisibles. Todavía existen y son parte del libro de trabajo, pero no son visibles para el usuario.

Sub MakeImageInvisible()Dim myImage As ShapeDim ws As WorksheetSet ws = ActiveSheetSet myImage = ws.Shapes("Imagen 1")myImage.Visible = msoFalse'Hacer visible la imagen nuevamente'myImage.Visible = msoTrueEnd Sub

Recorrer todas las imágenes en una hoja de trabajo

El siguiente código recorrerá todas las imágenes de la hoja activa.

Sub LoopThroughImagesOnWs()Dim shp As ShapeDim ws As WorksheetSet ws = ActiveSheetFor Each shp In ws.Shapes If shp.Type = msoPicture Entonces 'Haz algo con la imagen' Ejemplo, muestra el cuadro de mensaje MsgBox shp.Name "es una imagen" End IfNext shpEnd Sub

Confirma si el objeto seleccionado es una imagen.

El siguiente código comprobará si un objeto específico es una imagen.

Sub CheckIfSelectionIsPicture()Dim thing As ObjectSet thing = SelectionIf TypeName(thing) = "Imagen" Luego MsgBox "La selección es una imagen"Else MsgBox "La selección NO es una imagen"End IfEnd Sub

Imágenes vinculadas

Las imágenes se pueden vincular a celdas o rangos con nombre. Esto hace que la imagen sea dinámica; cuando el contenido de las celdas cambia, también cambia la imagen.

Sub MakeImageLinkedPicture()Dim ws As WorksheetSet ws = ActiveSheetws.Pictures("Imagen 1").Formula = "=A1:D10"End Sub

Opciones de colocación y bloqueo de imágenes

El comportamiento de la imagen se puede controlar mediante la opción de ubicación.

Sub ImagePlacementAndLockingOptions()Dim myImage As ShapeDim ws As WorksheetSet ws = ActiveSheetSet myImage = ws.Shapes("Picture 1")'Opciones de ubicación de imágenesmyImage.Placement = xlFreeFloating'Las otras opciones de ubicación son:'xlMoveAndSize'xlMove'Bloquear imágenes (evitar la edición) imagen cuando la hoja de trabajo está protegida)myImage.Locked = True'Las otras opciones de ubicación son:'myImage.Locked = FalseEnd Sub

Rotar imágenes

El siguiente código rota la imagen en una cantidad específica

Sub RotateImageIncremental()Dim myImage As ShapeDim rotationValue As IntegerSet myImage = ActiveSheet.Shapes("Picture 1")rotationValue = 45'Gira la imagen en la cantidad especificada por rotationValuemyImage.IncrementRotation (rotationValue)End Sub

El siguiente código rota la imagen a una cantidad específica.

Sub RotateImageAbsolute()Dim myImage As ShapeDim rotationValue As IntegerSet myImage = ActiveSheet.Shapes("Picture 2")rotationValue = 90'Gira la imagen en la cantidad especificada por rotationValuemyImage.rotation = rotationValueEnd Sub

Establecer la posición de la imagen en el centro de una celda.

Una imagen se posiciona según la parte superior e izquierda de esa imagen. El siguiente código establecerá la posición para que aparezca centrada dentro de una celda específica.

Sub CenterInCell()Dim myImage As ShapeDim cellLocation As RangeSet myImage = ActiveSheet.Shapes("Imagen 1")Set cellLocation = ActiveSheet.Range("B4")myImage.Top = cellLocation.Top + (cellLocation.Height / 2) - ( myImage.Height / 2)myImage.Left = cellLocation.Left + (cellLocation.Width / 2) - (myImage.Width / 2)End Sub

Voltear una imagen horizontal o verticalmente

Voltear la imagen horizontalmente:

Sub FlipImageHorizontal()Dim myImage As ShapeSet myImage = ActiveSheet.Shapes("Imagen 1")myImage.Flip msoFlipHorizontalEnd Sub

Voltear la imagen verticalmente:

Sub FlipImageVertical()Dim myImage As ShapeSet myImage = ActiveSheet.Shapes("Imagen 1")myImage.Flip msoFlipVerticalEnd Sub

Cambiar el tamaño de una imagen

El siguiente código bloquea la relación de aspecto; por lo tanto, cambiar el tamaño del ancho o alto mantendrá las proporciones de la imagen.

Sub ResizeImageLockAspectRatio()Dim myImage As ShapeDim imageWidth As DoubleSet myImage = ActiveSheet.Shapes("Imagen 1")imageWidth = 100myImage.LockAspectRatio = msoTruemyImage.Width = imageWidthEnd Sub

Al establecer la relación de aspecto en msoFalse, la altura y el ancho funcionan de forma independiente.

Sub ResizeImageHeightOrWidth()Dim myImage As ShapeDim imageWidth As DoubleDim imageHeight as DoubleSet myImage = ActiveSheet.Shapes("Imagen 1")imageWidth = 100imageHeight = 50myImage.LockAspectRatio = msoFalsemyImage.Width = imageWidthmyImage.Height = imageHeightEnd Sub

El siguiente código posiciona una imagen y la estira para cubrir perfectamente un rango específico.

Sub StretchImageToCoverCells()Dim myImage As ShapeDim ws As WorksheetDim rng As RangeSet ws = ActiveSheetSet myImage = ws.Shapes("Imagen 1")Set rng = ws.Range("A2:D10")myImage.LockAspectRatio = msoFalsemyImage.Left = rng .LeftmyImage.Top = rng.TopmyImage.Width = rng.WidthmyImage.Height = rng.HeightEnd Sub

Recortar

El siguiente código recorta una imagen según la distancia desde la parte superior, izquierda, inferior o derecha.

Sub CropImage()Dim myImage As ShapeSet myImage = ActiveSheet.Shapes("Picture1")myImage.PictureFormat.CropLeft = 50myImage.PictureFormat.CropTop = 50myImage.PictureFormat.CropRight = 50myImage.PictureFormat.CropBottom = 50End Sub

Cambiando el orden Z

La imagen se puede mover hacia adelante o hacia atrás dentro de la pila de objetos (conocido como Orden Z).

Sub ChangeZOrderRelative()Dim myImage As ShapeSet myImage = ActiveSheet.Shapes("Imagen 1")myImage.ZOrder msoBringForward'Envío alternativo hacia atrás'myImage.ZOrder msoSendBackwardEnd Sub

La posición del orden Z no se puede configurar directamente. Primero, envíe la imagen hacia atrás, luego mueva la imagen hacia adelante con un bucle. Continúe haciendo bucles hasta que la imagen alcance la posición de orden Z correcta.

Sub ChangeZOrderAbsolute()Dim myImage As ShapeDim imageWidth As DoubleDim imageZPosition As IntegerSet myImage = ActiveSheet.Shapes("Picture 1")imageZPosition = 3'Forzar el orden z a cero y luego adelantarmyImage.ZOrder msoSendToBackDo mientras myImage.zOrderPosition imageZPosition myImage.ZOrder msoBringForwardLoopEnd Sub

Establecer la imagen de fondo

La imagen de fondo aparece detrás de las celdas de la hoja de cálculo.

Sub SetImageBackground()Dim ws As WorksheetDim imgPath As StringSet ws = ActiveSheetimgPath = "C:UsersmarksDocumentsmyImage.webp"ws.SetBackgroundPicture fileName:=imgPath'Eliminar la imagen de fondo'ws.SetBackgroundPicture fileName:="End Sub

Guardar imagen desde Excel

Si tenemos una imagen en un libro de Excel, no existe una forma sencilla de guardarla en el disco como imagen. Una solución alternativa común es establecer la imagen como fondo de un área del gráfico y luego exportar el gráfico como una imagen.

Sub SavePictureFromExcel()Dim myPic As ShapeDim tempChartObj As ChartObjectDim savePath As StringSet myPic = ActiveSheet.Shapes("Imagen 1")Set tempChartObj = ActiveSheet.ChartObjects.Add(0, 0, myPic.Width, myPic.Height)savePath = "C :UsersmarksDownloadsmySavedPic.webp"'Copiar imagen en el gráfico, luego exportar chartmyPic.CopytempChartObj.Chart.ChartArea.SelecttempChartObj.Chart.PastetempChartObj.Chart.Export savePathtempChartObj.DeleteEnd Sub

Conclusión

En esta publicación proporcionamos más de 25 ejemplos para demostrar cómo insertar, eliminar, mover y controlar imágenes con VBA. Consulte las otras publicaciones en este sitio que utilizan estas técnicas:

  • 3 formas de cambiar o insertar imágenes basadas en valores de celda
  • Crear gráficos de mapas personalizados usando formas y VBA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Este sitio web utiliza cookies para mejorar la experiencia del usuario y garantizar un funcionamiento eficiente. Al utilizar nuestro sitio web, aceptas todas las cookies de acuerdo con nuestra política de cookies. Leer mas...