Saltar al contenido

Manipulación de imágenes


Recommended Posts

Hola,

Para realizar un inventario, he creado un userform con varios combobox y textbox y un image para seleccionar una imagen. Cuando completo todos los campos y pulso el botón correspondiente, los datos y la imagen se añaden a las celdas de la primera fila sin datos de la hoja. Así sucesivamente. Mediante dos botones del userform puedo subir y bajar por las filas de mi inventario y ver, a su vez, los registros en los controles.

El caso es que he creado un botón eliminar, para eliminar la fila que contiene un registro que quiero dar de baja, pero no me elimina la imagen!!

Llevo varios días buscando información sobre imágenes y su manipulación en visual basic, pero no encuentro literatura.

Agradecería que me iluminarais sobre como puedo eliminar también la imagen al eliminar la fila y, en general, sobre el manejo de imágenes en celdas de excel mediante VBA.

Gracias, Luis.-

Enlace a comentario
Compartir con otras webs

Bienvenido al foro:

Mejor sube el archivo, y aparte de que nos quedará mas claro lo que pretendes, cumplirás de paso con una de las normas del foro.

Te adelanto una solución, siempre y cuando la imagen esté dentro de un control Image, y que cuando hablas de "Eliminar" estés hablando de borrar la imagen y no el control Image, si el control se llama Image1:

Image1.Picture = LoadPicture("")[/CODE]

Saludos

PD: Para saber mas de imágenes insertadas directamente en la hoja mira lo que dice la [b]ayuda de VBA[/b] para la colección [b]Shapes.

[/b]

Cualquier objeto visual que insertemos en una hoja, controles de formulario incluidos, son objetos de tipo [b]Shape [/b]y están incluidos dentro de la colección [b]Shapes[/b].

Con la grabadora de macros activada, inserta cualquier imagen, forma u otra cosa que se te ocurra y luego miras el código que ha generado.

En una hoja vacía inserta una[b]caja de texto[/b], a dicha caja de texto podrás referirte de la siguiente forma:

[b]ActiveSheet.Shapes(1)[/b] .Por posicionamiento dentro de la colección Shapes

o

[b]

ActiveSheet.Shapes("1 TextBox") [/b].Por nombre del objeto (puedes cambiarlo en la caja de nombres)

Enlace a comentario
Compartir con otras webs

Hola:

La verdad es que no he tenido que tocar demasiado, básicamente darle un nombre normalizado a la imagen en el momento de crearla ("Foto" + nº de la celda donde se inserta), para así poder reconocerla en el momento de eliminar la fila.

Después de eliminar la fila, se renombran las imágenes desde esa fila hasta el final de datos.

Ya comentarás.

Saludos.

INVENTARIO2.xls

Enlace a comentario
Compartir con otras webs

Hola de nuevo, Macro Antonio, te agradezco muchísimo tu contribución a mi código. Es una solución ingeniosísima!!

He estado mirando cambiar el nombre de las imágenes y asignarle el mismo nombre que el código que genera el programa, pero me da algunos problemas y creo que lo voy a dejar tal y como está. Ahora me queda localizar la foto eliminada en la carpeta de fotos y eliminarla.

En cualquier caso, gracias por tu rápida y elegante respuesta, luis.-

Enlace a comentario
Compartir con otras webs

Archivado

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

  • 96 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • Buenas noches quisiera hacer esta formula auto incremental    =SI(INDIRECTO("'Casos de Prueba'!I1")="Resultados Ciclo 1"; SI(CONTAR.SI(INDIRECTO("'Casos de Prueba'!I:I"); "OK")=0; 0; CONTAR.SI(INDIRECTO("'Casos de Prueba'!I:I"); "OK")); 0)      para que cada vez que copiase y pegase la celda con la formula  se incrementara la letra en este caso la I pasara a J ,como el numero perteneciente a Resultados Ciclo pasando en este caso del 1 al 2.   Tengo también esta formula =CONCATENAR("CP";TEXTO(MAX((SI((ESNUMERO(HALLAR("CP";A$1:A1)))*(A$1:A1<>"");VALOR(EXTRAE(A$1:A1;3;3));0))+1);"000")&" - "&B2) quisiera que no tuviera los 3 ceros si no que fuera por ejemplo CP1 y se fuera incrementando. Gracias un saludo.
    • Con el diseño así como lo tiene en su libro, una fórmula de BUSCARV con COINCIDIR debería ser de utilidad =C5*BUSCARV($C$1,Tabla1[#Todo],COINCIDIR($D5,Tabla1[#Encabezados],0)) Es con lo que participaría en su consulta. Lo que resta es definir que hacer si no encuentra la OT porque así como esta le devolvería error en ese caso, o si tiene condiciones que haya podido omitir también le afectarían el resultado.
    • He cambiado mi macro a este: Sub repetir() Set a = Sheets(ActiveSheet.Name) uf = a.Range("C" & Rows.Count).End(xlUp).Row 'ultima fila con datos ActiveCell.Select ActiveCell.Offset(1, 0).Select   'Application.OnTime Now + TimeValue("00:00:10"), "repetir", , True End If End Sub   Lo que no se es como detenerlo al llegar a la ultima fila con datos de la columna C. Muchas gracias
    • Buenas tardes a todos. Tengo un problema que preciso de vuestra ayuda.  Tengo que controlar los gastos de la oficina que trabajo y he de repartir unos gastos a % según una OT y unos tipos de gastos. Envío un archivo adjunto. Lo que necesito es que lo que aparece en la columna en amarillo lo haga automáticamente, teniendo en cuenta los datos de la tabla a la derecha. Por ejemplo, el primer gasto tiene una cuota de 1477 euros y teniendo en cuenta que es un gasto de tipo Común y que la OT es la 12810234, le corresponde un gasto de 605,57 euros ya que según la tabla de la derecha su % a imputar es de un 41%. ¿alguien me puede ayudar con la formula? He de añadir muchas más líneas y más hojas con el resto de OT y en el futuro cambiar más datos, así que necesito automatizarlo con una formula Excel. Gracias. Control de gastos.xlsx
    • Hola buenas tardes: Por favor me pueden ayudar a realizar lo siguiente. ejecutar una macro después de un tiempo, que recorra una columna a partir de la celda activa hacia abajo. Es una lista extensa, que filtro desde la columna B. y solo me muestra las filas que me interesan. ejemplo: Si mi celda activa es la C23 ejecutar la macro y baje una celda y repite la macro después de 20 segundos y lo vuelve hacer(Simpre bajando una celda), y que este se detenga hasta la ultima fila que este visible en el filtro. Ya que puedo tener muchos datos mas.   Gracias   Prueba filtro y avance.xlsm
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • 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.