Saltar al contenido

problemas con borrar imagenes


compusxx

Recommended Posts

publicado

Hola amigos.

He creado un cuadro de lista que contiene una relación de cosas. Al hacere clic en una de ellas aparece la imagen de dicha cosa. Hasta ahi funciona bien. Luego he creado un boton para que borre la imagen que apareció. Resulta que no lo borra. Sale un mensaje de error.

apelo a la buen volunta del foro para que me obsequien alguna orientación

gracias por anticipado.

saludos.

Aldo.

adjunto archivo de excel

[ATTACH]34747.vB[/ATTACH]

cuadro de lista con macros2.rar

publicado

Hola a ambos 2:

Yo como siempre, he hecho lo que me ha dado la gana.

La lista la he sustituido por una lista ActiveX.

La lista se llena, de forma automática (Propiedad .ListFillRange), con las columnas 1 y 2 de la Hoja2, la columna 2 correspondiente al nombre de la imagen queda oculta.

Cada vez que selecciones un elemento de la lista, se visualizará la imagen asociada al nombre y se eliminará la anterior.

También puedes eliminar la imagen pulsando sobre ella.

Cada vez que añadas una imagen nueva en la Hoja2, debes rellenar las columnas 1 y 2 con la descripción y el nombre de la imagen.

Te lo dejo preparado para 100 imágenes, si necesitas mas, solo tienes que modificar la propiedad .ListFillRange de la lista.

Paz y amor

cuadro de lista con macros2.xls

publicado

Hola antonio.

Ha quedado estupendo, pero sino te importa me podias explicar esto:

.Top = [N2].Top               'Distancia desde el margen superior
   .Left = [N2].Left             'Distancia desde el margen izquierdo
   .Height = [n7].Top - [N2].Top

Saludos.

publicado

Hola Toldeman, puedo intentar explicarte por que creo que ha hecho eso Antoni.

Hoja2.Shapes(Imagen).Copy: ActiveSheet.Paste

Copia la imagen de la Hoja2 en la "celda activa" de la "hoja activa"

Una imagen cuando es copiada, mantiene las coordenadas relativas X,Y con respecto a la celda en la cual Excel interpreta que dicha imagen existe, el origen siempre es referido a la parte superior izquierda de una celda. Cuando pegamos dicha imagen en otra celda, excel no solo pegará la imagen sino que le atribuirá estos atributos (entre otros muchos) de distancia superior y distancia izquierda.

Por otro lado, una celda (siempre asociada a su tipo Range), coincide con las características de posicionamiento de una imagen, por lo que podremos usar [CELDA].Top para saber la distancia que tiene (desde su esquina superior izquierda) dicha celda con el inicio que es [PrimeraCelda].Top, o [CELDA].Left para saber su distancia con el inicio de la tabla donde se encuentra.

En el ejemplo de este hilo, las imágenes de la Hoja2 pueden encontrarse en cualquier celda, pueden ser de cualquier tamaño y pueden no encontrarse en el punto (0,0) del origen de la celda, por lo que la solución de Antoni es buena ya que tras copiar y pegar la imagen, se asegura de que:

1- [n2].Top = El borde superior de la imagen estará situado en el borde superior de la celda n2.

2- [n2].Left = El borde izquierdo de la imagen estará situado en el borde izquierdo de la celda n2.

3- .Height = [n7].Top - [n2].Top, ajusta/redimensiona la altura de la imagen para que esta quede comprendida entre el borde superior de la celda N2 y el borde superior de la celda N7. El ancho se reajusta de manera proporcional a lo ancho por lo que se ignora de modo que no se obtenga una imagen deformada.

Un saludo.

publicado

Hola "Toldo":

Reposiciona y redimensiona la imagen

[N2] equivale a Range("N2")

Por lo que .Top = [N2] coloca la imagen a la altura de la celda N2

En cuanto al alto de la imagen la ajustamos al alto desde la fila N2 a la fila N6.

No ajustamos el ancho porqué lo hace de forma automática al no haber especificado .LockAspectRatio = False.

A mandar

- - - - - Mensaje combinado - - - - -

Hola Santi, nos hemos cruzado. Saludos.

publicado

Hola.

Muchas gracias a los dos por sus respuestas me ha quedado bastante claro. He estado haciendo varias pruebas con este codigo:

x = ActiveCell.Top
y = ActiveCell.Left

x = 15 (fila) --- y = 60 (columna). Estos son los incrementos apartir de A1(0,0).

Por lo que la celda F4 sera x = 15 * 3 --- y = 60 * 5----F4(45,300)

Estos resultados siguen siendo los mismos aunque el alto y ancho de la celda sean modificados.

Muchas gracias.

publicado
Estos resultados siguen siendo los mismos aunque el alto y ancho de la celda sean modificados.

O yo no entiendo esta frase o tu no te has explicado bien.

Si tu cambias el alto de las alguna de las filas 1:3 y el ancho de alguna de las columnas A:E [F4].Top y [F4].Left cambian.

Si eso lo tienes claro, no hay nada mas que añadir.

¡ Ave !

Invitado Cacho R
publicado
... Te lo dejo preparado para 100 imágenes, si necesitas mas, solo tienes que modificar la propiedad .ListFillRange de la lista...

Hola! a todos.

Este aporte de Antoni está muy bueno y práctico.

Sin embargo disiento -conceptualmente- en la frase resaltada. O sea: 100 imágenes convertiría a una mera planilla de cálculo en un contenedor innecesario de imágenes ("innecesario" por el peso que tendría ese hipotético archivo).

Para tal instancia -entiendo- sería más práctico tener todas las imágenes en el disco y tomarlas de allí como en el ejemplo que adjunto.

En resumen:

- Pocas imágenes pueden ser ubicadas en el archivo sin drama alguno

- Muchas imágenes deberían ser ubicadas en el disco.

Saludos, Cacho R.

Administración de imágenes.zip

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.