Cómo insertar, mover y eliminar imágenes con VBA
- 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
- Guardar imagen desde Excel
- 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