La deformación de imágenes con el código VB sigue

Saludos de nuevo DAM

He cambiado el tamaño de las imágenes al tamaño EXACTO que van a ocupar en el Excel en la hoja 'Disciplinas'. Es decir, del W10 al Y16, lo que hace un total de 121 píxeles de ancho y 113 de alto. He hecho una captura con Photoshop para medir el tamaño exacto y así lo he hecho. Ninguna imagen se suponer a otra y quedan perfectamente encuadradas, pero cuando se usa el VB se descuadran y aparecen casi el doble de grandes de tamaño. ¿Por qué ocurre esto?

Te envío a tu correo las imágenes y el archivo para que lo compruebes si es necesario. Tienen el tamaño perfecto para encajar en la zona gris, es exactamente ese, pero no funciona

Private Sub Worksheet_Calculate()
'Por.DAM
On Error Resume Next
Me.Shapes("imagen1").Delete
Me.Shapes("imagen2").Delete
Me.Shapes("imagen3").Delete
If Range("V24") <> "" Then
 poner "V24", "W10:Y16", "imagen1"
End If
If Range("V40") <> "" Then
 poner "V40", "AB10:AD16", "imagen2"
End If
If Range("V56") <> "" Then
 poner "V56", "AG10:AI16", "imagen3"
End If
End Sub
Sub poner(r1, r2, r3)
'Por.DAM
 Application.ScreenUpdating = False
 imagen = Range(r1) & ".png"
 ruta = ActiveWorkbook.Path & "\disciplinas\" & imagen
 Set clan = Me.Pictures.Insert(ruta)
 With Range(r2)
 Arriba = .Top
 Izquierda = .Left
 Ancho = .Offset(0, .Columns.Count).Left - .Left
 Alto = .Offset(.Rows.Count, 0).Top - .Top
 End With
 With clan
 .Name = r3
 .Top = Arriba
 .Left = Izquierda
 .Width = Ancho
 .Height = Alto
 End With
 Set clan = Nothing
 Application.ScreenUpdating = True
End Sub

1 Respuesta

Respuesta
1

Reviso el archivo.

Tengo un problema. Y es que si se protege la hoja, las imágenes no se cargan. ¿Alguna solución a esto? Porque claro, el Excel necesito protegerlo para que los usuarios sólo puedan tocar ciertas celdas, el resto es simplemente información, y con las hojas protegidas las imágenes no salen

En cada una de las macros, al principio de cada una, tienes que poner la instrucción para desproteger la hoja y al final de la macro tienes que proteger la hoja, por ejemplo:

Private Sub Worksheet_Calculate()
'Por.DAM
On Error Resume Next
Sheets("Disciplinas").Unprotect "password"
Me.Shapes("imagen1").Delete
Me.Shapes("imagen2").Delete
Me.Shapes("imagen3").Delete
If Range("V24") <> "" Then
 poner "V24", "W10:Y16", "imagen1"
End If
If Range("V40") <> "" Then
 poner "V40", "AB10:AD16", "imagen2"
End If
If Range("V56") <> "" Then
 poner "V56", "AG10:AI16", "imagen3"
End If
Sheets("Disciplinas").Protect "password"
End Sub

Cambia "Disciplinas" por el nombre de la hoja donde se está aplicando la macro.

Cambia "password" por la palabra que estás utilizando para el password

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas