Finalizando con este post la serie de artículos sobre el tratamiento de imágenes, hoy explicaré como, mediante una macro de Excel podemos listar los ficheros contenidos en una Carpeta y en qué forma, aprovechando los nombres de esos ficheros (imágenes), los insertaremos en las celdas contigüas respectivas, adecuando el tamaño de la celda.
Es por tanto un resumen de las entradas anteriores, añadiendo a éstas la instrucción .Picture.Insert que habilita la inserción de imágenes si trabajamos con Excel 2007 o Excel 2010.
En el ejemplo sobre el que trabajo la ruta es fija, definida sobre una variable incluida en la macro de Excel, en particular: D:\BancoFotos\
Insertaremos en un módulo del Explorador de proyectos del Editor de VBA el siguiente código, formando nuestra macro de Excel:
En esta entrada lo más importante, y novedoso respecto a las anteriores explicaciones, es la parte del código VBA donde se recorre el rango A2:A5 donde se insertaron los nombres de los ficheros de imagen, para ir incorporando en la celda contigüa (columna B) la imagen que le corresponda por nombre:
ActiveSheet.Pictures.Insert(Ruta & celda.Value)
Podemos ver en imágenes el antes y después de la ejecución de la macro 'FicherosCarpeta':
Si ejecutamos la macro asignada al botón Listar e Insertar imágenes obtendríamos:
Consiguiendo lo que pretendíamos, es decir listar el contenido de ficheros de una carpeta de nuestro equipo, e insertar a nuestra Hoja de cálculo de Excel las imágenes de esa carpeta.
Es por tanto un resumen de las entradas anteriores, añadiendo a éstas la instrucción .Picture.Insert que habilita la inserción de imágenes si trabajamos con Excel 2007 o Excel 2010.
En el ejemplo sobre el que trabajo la ruta es fija, definida sobre una variable incluida en la macro de Excel, en particular: D:\BancoFotos\
Insertaremos en un módulo del Explorador de proyectos del Editor de VBA el siguiente código, formando nuestra macro de Excel:
Sub FicherosCarpeta() 'www.excelforo.com Dim Ruta As String Dim Fotos As Object Dim rng As Range, celda As Range 'Saltamos posibles errores On Error Resume Next Application.ScreenUpdating = False ''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim img As Shape 'si existe alguna foto, la borro: On Error Resume Next For Each img In ActiveSheet.Shapes If img.Type = 11 Then img.Delete Next ''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'Creamos el objeto FileSystemObject que 'proporciona acceso al sistema de archivos de un equipo Set fso = CreateObject("Scripting.FileSystemObject") 'Indicamos la ruta de donde vamos a obtener 'los ficheros, en este caso D:\BancoFotos Ruta = "D:\BancoFotos\" 'definimos dos variables que necesitaremos, 'para recuperar el nombre de la carpeta, y los ficheros que haya dentro Set Carpeta = fso.GetFolder(Ruta) Set ficheros = Carpeta.Files 'damos un título en negrita para la celda A1 With Range("A1") .Value = "Ficheros de la carpeta " & Ruta .Font.Bold = True End With 'escribimos los ficheros, a partir de A2 Range("A2").Select For Each archivo In ficheros 'escribimos el nombre del fichero ActiveCell = archivo.Name 'bajamos una fila ActiveCell.Offset(1, 0).Select Next archivo ActiveCell.EntireColumn.AutoFit ''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set rng = Worksheets("Hoja1").Range("A2:A5") For Each celda In rng If Len(Trim(celda)) > 0 Then 'defino la celda equivalente de la columna A y la selecciono Set r1 = Cells(celda.Row, "B") r1.Select 'se inserta la imagen de la ruta definida Set Fotos = ActiveSheet.Pictures.Insert(Ruta & celda.Value) 'con la posición definida respecto a la celda de la columna B seleccionada With Fotos .Top = r1.Top .Width = .Width / 1.5 .Height = .Height / 1.5 .Left = r1.Left + (r1.Width - Fotos.Width) / 2 .ShapeRange.LockAspectRatio = msoFalse r1.EntireRow.RowHeight = .Height .Placement = xlMoveAndSize End With r1.Select End If Next celda ''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'Limpiamos los objetos y variables definidas Set fso = Nothing Set Carpeta = Nothing Set ficheros = Nothing Set rng = Nothing Set r1 = Nothing Set Fotos = Nothing Application.ScreenUpdating = True End Sub
En esta entrada lo más importante, y novedoso respecto a las anteriores explicaciones, es la parte del código VBA donde se recorre el rango A2:A5 donde se insertaron los nombres de los ficheros de imagen, para ir incorporando en la celda contigüa (columna B) la imagen que le corresponda por nombre:
ActiveSheet.Pictures.Insert(Ruta & celda.Value)
Podemos ver en imágenes el antes y después de la ejecución de la macro 'FicherosCarpeta':
Si ejecutamos la macro asignada al botón Listar e Insertar imágenes obtendríamos:
Consiguiendo lo que pretendíamos, es decir listar el contenido de ficheros de una carpeta de nuestro equipo, e insertar a nuestra Hoja de cálculo de Excel las imágenes de esa carpeta.
Hola excekforo,
ResponderEliminarUna consulta he creado un botón para insertar las imágenes lo activo y me las importa las imágenes hasta ahí bien, creo otro botón para borrarla y no sé de adonde asignarle la macro, ya que en la ventana de asignación de macro solo me sale un nombre que es insertar imágenes si me puedes Orientar de como hacerlo.
Gracias
Marcelo.
Hola Marcelo,
Eliminarel botón de 'Borrar imágenes' corresponde a la macro explicada en un post anterior:
http://excelforo.blogspot.com.es/2012/05/vba-una-macro-de-excel-para-borrar-solo.html
Un cordial saludo
Hola excelforo, un placer saludarlo:
ResponderEliminarQuisiera saber, a mi me barra las Imágenes pero no me borra las lista de los nombres de las imágenes eso es normal o es algo te he hecho mal.
gracias...
Anabel
Hola Anabel,
Eliminarsi la macro está construida para borrar sólo las imágenes, dejando el listado de nombres.. aunque también se podrían borrar añadiendo otra línea de código.
Asi que no has hecho nada mal...
;-)
Slds
Hola excelforo,
ResponderEliminarYo inserto una imagen con la siguiente línea:
ActiveSheet.Pictures.Insert(rutaDeImagen).Select
Lo hace perfectamente, el problema que tengo es que en cuanto la imgen ya no se encuentra en ruta determinada en la hoja desaparece dejando un recuadro. Esto es por que en realidad lo que hace esa línea es vincular a la imagen insertada.
Mi pregunta es:
¿Cómo hacer para que la imagen insertada en la hoja no dependa de la imagen original?
Muchas gracias.
Hola,
Eliminarbueno, esa línea de código inserta una imagen existente en una ruta concreta (en un directorio del equipo o algún servidor), asi que hasta cierto punto es verdad que hay un 'vínculo', ya que si no existe ese fichero de imagen la instrucción intenta insertar un objeto imagen que al no existir lo deja vacío, con ese recuadro que comentas.
Esto es, se replica la acción de insertar una imagen desde la ficha Insertar > Ilustracones.
Hasta donde yo sé para evitar esa vinculación tendrías que emplear una instrucción de copiado y pegado de imagenes, pero para ello deberías trabajar sobre una imagen particular (no un fichero) localizable en algún documento de Office para poder referenciarlo de alguna manera.
Slds
Muchas gracias por contestar, trabajaré en lo que has dicho y si tengo éxito comentaré el resultado. Muchas gracias de nuevo y un saludo
EliminarMuy util. Gracias por el post.
ResponderEliminarPregunta. No me esta pegando las imagenes al lado de los ficheros.
La macro pone los nombres de los ficheros, pero no las fotos. Que puede estar pasando?
Hola!!
Eliminares raro, por que si te pone los nombres de los ficheros es que los tiene localizados... asegurate que la ruta de la carpeta es correcta, que no le falta ninguna barra \, es lo único que se me ocurre.
Por que ¿estás trabajando con Excel 2007 ó 2010, verdad?
Slds
Muchas gracias por la pronta respuesta!
EliminarFaltaba colocar una barra al final del directorio. Error de novato!
Buen día.
EliminarYo también estoy penando con esta línea, porque inserta las imágenes, pero cuando el archivo lo envío por correo las imágenes salen "x".
Pero cuando inserto la imagen con los botones normales del excel, la imagen se queda en el archivo y al mover la carpeta de imágenes, no afecta el libro.
Para obtener la ruta de la imagen uso getopenfilename(), y el resultado lo coloco como variable del pictures.insert....
Hay alguna otra forma de insertar la imagen y que se quede en el libro, como ya mencioné yo envío por correo los archivos, y obvio que la pc destino no está la imagen insertada.
Muchas gracias
Hola Victorio,
Eliminarnormalmente lo que hacemos es copiar y pegar imágenes de otras rutas.. por eso se mantiene la imagen en el fichero... pero al insertarlas de la manera que se explica, efectivamente ocurre lo que comentas.. ya que deja de existir el vínculo...
Buscaré a ver si existe una solución práctica..
Slds
Hola. Muchas gracias por toda la informaciòn que nos dan.
ResponderEliminarTengo una duda. He creado una macro en Excel, la cual me grafica unos datos de unas columna. En VBA he creado un botón el cual por medio de "Call (Nomnbre de la macro)" me activa la macro en excel, hasta ahí todo muy bien. Lo que necesito es que ese grafico que se genera en Excel me quede insertado en la interfaz que tengo de VBA. Muchas gracias por la ayuda. Visito mucho este blog.
Gracias a ti Camilo!
EliminarNo acabo de comprender a que te refieres con que el gráfico quede insertado en la interfaz de VBA ????.
¿Te refieres a insertarlo dentro de un UserForm???
Slds
Si, a eso me refiero. A insertarlo dentro de mi UserFrom. Es decir, el grafico generado en la hoja de calculo de Excel me quede insertado en mi UserFrom. Muchas gracias por la respuesta.
EliminarOk,
Eliminarsubiré un post para explicar el proceso en los próximos días.
Un saludo
Muchas gracias. me gustaria que me dieras los codigos, si ya los tienes. Lo que pasa es que eso es lo ultimo que me falta para entregar el proyecto y este mismo hay que entregarlo el viernes 15 de febrero
EliminarLo siento, pero no lo tengo aún...
Eliminaren los próximos días.
Slds
Listo amigo, yo espero entonces. Muchas gracias por la atención.
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarEstimados!
ResponderEliminarNecesito enviar 2 imagenes de la hoja activa por mail... arme el mail con los datos que necesito, pero no se como colocar las imagenes. me podrian ayudar por favor.
saludos!
Hola!
Eliminarte adjunto un link a una web donde se explica (y desarrolla) una macro para tal acción.
http://www.anshumusing.co.in/sending-email-outlook-excel-vba-macro/
Creo que responde a lo que necesitas...
Slds
Muchas Gracias por la rápida repuesta!!! lo que necesito es enviar una imagen que se encuentra en la hoja activa "1 Gráfico". esa imagen puede estar en el body del mensaje o como adjunto...
Eliminaren el enlace, no aparece esa opción y es la que me esta sacando canas!!
ja!
si se te ocurre me avisas? Te agradesco nuevamente!
Hola muchas gracias, muy completo el tutorial, acá tu ajustas la celda a la imágen, como sería al revés, es decir, ajustar la imagen a la celda?
ResponderEliminarsaludos
Hola,
Eliminarbien, lo primero sería determinar la dimensión de la celda mediante variables; tendrás que usar las propiedades
altocelda=ActiveCell.RowHeight
anchocelda=ActiveCell.ColumnWidth
para luego dar a la imagen ese ancho y alto, sobre el código del post, sería algo así:
With Fotos
.Top = r1.Top
.Width = anchocelda
.Height = altocelda
etc, etc
Quizá haya que tener cuidado con las unidades de medida, pero la idea sería esa.
Espero te sirva.
Slds
muchas gracias!!!!
Eliminarsaludos
Hola buen día, muy interesante esto de las macros, actualmente uso excel para presupuestar o cotizar trabajos digamos pisos epoxicos y de los cuales hay muchos tipos, por lo general incluyo imágenes ilustrativas de lo que estoy cotizando de la manera tradicional "insertar imagen de", y ya que tengo armada la cotización por lo regular 3 hojas tamaño carta la guardo como pdf y la envió al cliente, ahora bien me pregunto si de alguna manera por medio de macros podría llamar las imágenes que necesito para cierta cotización colocandolas en una de las hojas digamos que esta hoja sea solo para imágenes muestra de lo cotizado (maximo 4 a 6 imagenes), y otra pregunta seria como colocarle un foliador de cotizaciones digamos por fecha ejemplo 13031814:20 donde (13año 03mes 18dia 14:20hora). Gracias
ResponderEliminarHola Norberto,
Eliminarecha un vistazo a esta entrada
http://excelforo.blogspot.com.es/2011/08/como-asociar-una-imagen-al-valor-de-una.html
De esta manera podrás buscar la foto asociandola a cada cotización.
Espero te pueda servir.
Respecto a la otra cuestión de obtener ese 'foliador' podrías formularlo así:
=DERECHA(AÑO(AHORA());2)&MES(AHORA())&DIA(AHORA())&HORA(AHORA())&":"&MINUTO(AHORA())
ahora bien, ojo por que esta fórmula actualiza su valor cada vez que se recalcule la hoja!!!
Slds
Gracias todo funciono excelente, lo del folio, lo de las imágenes, inclusive agregue que se guardara como un pdf con nombre a base del folio y cliente, también agregue macro para convertir el importe de la cotización a texto y le agregue la opción en moneda nacional y en usd.
EliminarAhora lo que me faltaría y espero me puedas orientar es que me separe las hojas al momento de mandar a pdf o imprimir. Espero me entiendas lo que quiero es que imprima hasta donde tengo el importe total de la cotización (por decir la fila 40 donde el importe total lo tengo en la celda M40) la cotización puede ser o abarcar una,dos o tres hojas. Lo que esta después de la fila 40 lo pase o siga imprimiendo en la siguiente hoja.
Gracias
Hola Norberto...
Eliminarhabría que tener localizado, supongo mediante alguna variable o bien mediante un .Find que indique la fila donde corta y pasa a la siguiente página a imprimir, y luego incorporar la propiedad HPageBreaks que añade un Salto de página en la impresión...
Slds
buscando aquí y allá con esto soluciono lo del el rango de impresión y la creación y guardado del PDF para archivo e impresión.
Eliminar'para insertar salto de pagina
Sub Saltoparaimpresion()
Function ACNColocaSaltos(CeldaInicial As String, CeldaFinal As String, Palabra As String)
CeldaInicialColumna = Mid(CeldaInicial, 1, 1)
CeldaInicialFila = Val(Mid(CeldaInicial, 2))
CeldaFinalColumna = Mid(CeldaFinal, 1, 1)
CeldaFinalFila = Val(Mid(CeldaFinal, 2))
For Fila = CeldaInicialFila To CeldaFinalFila
For Columna = Asc(CeldaInicialColumna) To Asc(CeldaFinalColumna)
celda = Trim(Chr(Columna)) + Trim(Str(Fila))
If Range(celda).Value = Palabra Then
Rows(Fila).Select
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
End If
Next
Next
End Function
Sub macroacn()
If ACNColocaSaltos("A1", "A80", "salto") Then
MsgBox ("PROCESO TERMINADO")
End If
'
'Para convertir a PDF y guardar en x carpeta, bautizando el nombre de dicho PDF con lo que esta en la Celda B3 y B2
'
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:="C:\x carpeta\" & Range("B3").Value & "_" & Range("B2").Value, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
End Sub
Muchas gracias por tu ayuda, aclaro que esto que estoy colocando aquí es creación de otras personas ya que no tengo mucho conocimiento de programación en VBA, pero buscando se encuentra.
Espero tus comentarios y/o sugerencia al respecto y si se puede mejorar te lo agradecería.
Y por supuesto cuenten con una donación para el foro.
Hola Norberto,
Eliminarnada que decir al respecto.
La función parece que añade un Salto de página horizontal cuando entre las celdas del rango definidio por CeldaInicial y CeldaFinal encuentra una con el texto Palabra.
La segunda macro exporta el archivo como PDF, empleando para generar el nombre del archivo las celdas B3 y B2.
Muchas gracias por el aporte, siempre son bienvenidos...
Un cordial saludo!!!
hola,
ResponderEliminarMUCHAS GRACIAS POR TU TRABAJO
he estado trabajndo con tu macro:
For Each archivo In ficheros
'escribimos el nombre del fichero
ActiveCell = archivo.Name
ActiveCell.Offset(0, 1) = archivo.DateCreated
ActiveCell.Offset(0, 2) = archivo.DateLastAccessed
ActiveCell.Offset(0, 3) = archivo.DateLastModified
ActiveCell.Offset(0, 4) = archivo.Typwidthwite
ActiveCell.Offset(0, 5) = archivo.Size
ActiveCell.Offset(0, 6) = archivo.shortpath
ActiveCell.Offset(0, 7) = archivo.shortname
ActiveCell.Offset(0, 8) = archivo.Attributes
ActiveCell.Offset(0, 9) = archivo.Path
pero me falta una cosa, a mi me gustaría tambien saber el tamaño en pixeles de las imagenes; es decir yo tengo una carpeta con solo imagenes y además de los datos que has introducido debería poder extraer los datos de altura y anchura en pixeles de la imagen.
Me puedes ayudar.
Muchas gracias.
Hola!!,
Eliminarpues he repasado mis notas, y me parece que la propiedad Dimension es una de las pocas que no se pueden extraer...
echa un vistazo también a
http://excelforo.blogspot.com.es/2012/12/vba-como-cambiar-las-propiedades-de-un.html
Seguiré buscando, por si acaso exite alguna opción..
Slds
Un Favor ando perdido tengo una macro hecha en office 2003, trabaja muy bien inserta las imágenes por medio de Picture.Insert en office 2007 trabaja igual pero ahora en Office 2010 segun las pega pero no las deja ahi como antes lo hacia, si quiero abrir el archivo en otra maquina u la mando por correo cuando lo abren las imagenes no se muestran solo se ve un cuadro con una "x" me pueden ayudar por fa
ResponderEliminarHola Rubén,
Eliminarno sabría decirte, Picture.Insert hace precisamente eso, insertar una imagen en la hoja de cálculo, por lo que debera mantenerse ahí para cualquier usuario... es decir, no hay un vínculo de imagen con su procedencia.
Si te funciona bien con Excel 2007 debe hacerlo también para Excel 2010...
De todas formas buscaré algo de documentación al respecto, a ver si encuentro algo.
Slds
Está excelente tu código, solo que tengo un problema, al abrir el archivo de excel con las imágenes en otra PC, en la que no se encuentra la carpeta con los archivos de las imágenes, no las muestra, quisiera saber como podríamos hacer que las imágenes queden dentro del archivo de excel y no como referencia a un archivo en una carpeta externa.
ResponderEliminarHola Natanael,
Eliminarla cuestión del ejemplo explicado en el post es la vinculación de una imagen (que insertaremos) respecto al valor de una celda 8en la que se encuentra la ruta).
Quiero decir con esto que el problema no es el método Insert que inserta sin más una imagen, si no en la ruta dada en la celda.
fijate en que lo primero que se hace con la macro es borrar las imagenes exitentes...
Si tu quieres mantener las imágenes (independientemente de donde esté el fichero y la ruta) simplemente tendrías que insertalas una vez y no volver a ejecutar la macro, así tendrías las imágenes cargadas automáticamente (la primera vez) y en posteriores ocasiones no se haría necesario volver a cargarlas...
Espero haber comprendido tu planteamiento
Slds cordiales
excelforo, excelente aporte, me ha servido muchisimo!!!! gracias!
ResponderEliminarBuenas ..
ResponderEliminarNecesito realizar una macro que me copie la formula que esta en la fila de arriba con la excepción que en la nueva fila que se cree ,tiene que cambiar el nombre del libro EJ
En la celda B7 tengo esta formula
=AÑO('[03-2013.xlsm]TABLERO GESTIÓN'!$B$30)&-CONSULTAV((MAX('[03-2013.xlsm]TABLERO GESTIÓN'!$A$37:$A$37));'[03-2013.xlsm]TABLERO GESTIÓN'!$A$37:$Q$37;1;0)
En celda B8
=CONSULTAV((MAX('[03-2013.xlsm]TABLERO GESTIÓN'!$A$37:$A$37));'[03-2013.xlsm]TABLERO GESTIÓN'!$A$37:$Q$37;3;0)
Tengo celdas con formulas que es de la B8 hasta Q8 que es la misma ...
Esas formulas sacan de datos de otro libro que se llama 03-2013 lo que quiero es que cuando se cree la nueva fila con las formula.. automáticamente me cambie la formula con el nombre de libro 04-2013 si quiero crear otra después de la 04-2013 cree 05-2013 y asi ...
Gracias de antemano
Hola,
Eliminarno es necesario aplicar macros para tal cosa, bastaría aplicaras la función INDIRECTO.
Tendrías que reemplazar el nombre y ruta del fichero [03-2013.xlsm] por un texto que concatene una variable (con valor 3,4,5,6, etc) con el resto del texto '-2013.xlsm]'; por ejemplo, la variable, al ir copiando hacia abajo en la misma columna desde la fila 8, podrías conseguirla con la funcion FILA()-4 que en la celda B8 nos daría el cuatro, concatenado con:
"'[0"&FILA()-4&"-2013.xlsm]TABLERO GESTIÓN'!$B$30"
tendríamos la ruta del archivo correspondiente.
Por ejemplo, para la primera parte de la fórmula, quedaría:
=AÑO(INDIRECTO("'[0"&FILA()-4&"-2013.xlsm]TABLERO GESTIÓN'!$B$30"))
De manera similar para el resto...
Slds
Buenas gracias por responder...
EliminarResulta que tengo un libro que es Principal que este saca datos de una carpeta llamada Caracterizaciones y dentro de ella tiene libros llamados en secuencia 01-2013 02-2013 03-2013 y asi cada mes se agrega uno nuevo siguiendo el numero de mes.
Lo que quiero es hacer que cuando se agrege un nuevo libro la formula cambie como lo mencione antes...
O lo otro seria no se si es posible alguna macro para cuando se agrege un libro nuevo en la carpeta Caracterizaciones el libro Principal detecte que se agrego uno nuevo libro y me copie la formula de la fila de arriba a la de abajo pero cambando el nombre del libro...
Muchas gracias por tu interes..
Hola,
Eliminarcorrecto... eso es lo que te propuese con la fórmula anterior, con esas fórmulas y esos oconcatenados de texto, podrás copiar y arrastrar tu fórmula y que se adecúe al nuevo fichero en esa carpeta 'Caracterizaciones'.
Añadele al texto la ruta completa, por ejemplo
"C:\Caracterizaciones\'[0"&FILA()-4&"-2013.xlsm]TABLERO GESTIÓN'!$B$30"
Que una macro detecte si existe un nuevo fichero en una carpeta lo veo complicado.. evidentemente se podrían recorrer los ficheros de esa carpeta para buscar una celda de alguna de susu hojas.. pero parece difícil vincularlo a una fórmula y una celda concreta para un Nombre de fichero en particular.
Te recomendaría aplicaras la fórmula descrita.
Slds
Disculpa
EliminarResulta que aparece #!REF¡ el tema es que ese libro principal lo van a tener varias personas. quiero tener las formulas con la secuencia de los libros para cuando se agregen los libros a la carpeta no exista problema en que saque los datos..
Ej el libro llamado 05-2013 todavia no esta en la carpeta Caracterizaciones por eso quiero que al momento de agregar el libro 05-2013 el libro principal ya tenga esa formula llamando al la ruta del libro 05-2013
No se que hacer!!
Si general la fórmula con el vínculo a un Libro, como comentaba más arriba, lógicamente mientras que no exista el libro te saltará un error... pero tambiéb es cierto que en el momento que el Libro se genere en esas carpeta (donde indica la ruta) el valor será devuelto.
EliminarPoco más se pude hacer mientras no exista el Libro.
Slds
Muchas gracias por tu ayuda...
EliminarHola
ResponderEliminarResulta que tengo un problema con una ruta para ir a un disco en red para ir a una carpeta he intentado mucho y nada
este es el codigo
He puesto esta ruta y no funciona algo falta
\\ newton \ users \ 9PRODUC \ RPeredo\ caracterizaciones \.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim l1 As Worksheet
Application.ScreenUpdating = False
Set l1 = ThisWorkbook.Sheets("Base dato")
On Error GoTo x
Dim Carpeta As String
Dim formato
Dim fecha
Carpeta = "aqui va la ruta"
If Target.Text = "" Then Exit Sub
formato = Format(Range("M5"), "mm-y")
Workbooks.Open (Carpeta & formato)
Sheets("TABLERO GESTIÓN").Range("A1:Q34").Copy
l1.Range("B9").PasteSpecial _
Paste:=xlPasteValuesAndNumberFormats, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False
ActiveWorkbook.Save
ActiveWorkbook.Close
Hoja13.Select
Exit Sub
x:
fecha = Range("M5").Value
Sheets("Base dato").Range("B12:R42").ClearContents
MsgBox "Por el momento no existen datos manuales con Fecha ( " & fecha & " ) ,64,"Información"
End Sub
Muchas gracias
Hola,
Eliminares difícil decir... pero podrían ser un par de cosas.
Una primera, la más probable, es que al definir la variable formato tendrías que haberlo hecho, no con Format, si no como cadenas contatenadas:
....
Dim formato As String
formato = Mid(Range("M5").Value, 4, 2) & "-" & Year(Range("M5").Value)
Workbooks.Open (Carpeta & formato)
....
La otra posibilidad es que la ruta no la esté reconociendo... quizá, la falte la unidad??
Hola ayuda por favor:
ResponderEliminarNecesito cargar una imagen, cada vez que ingrese un código ejemplo.
Ingreso código en la celda A2, se inserta imagen en la celda B2
Ingreso código en la celda A3, se inserta imagen en la celda B3
La idea es la misma las fotos las tendré en una carpeta junto con el excel.
Saludos
Frank
Hola Frank,
Eliminarel código explicado trabaja recorriendo rangos, por tanto lo que necesitas es rediseñar eliminando las partes FOR EACH y cmabiándolo por una evaluación de celda activa (por ejemplo), quizá con unmétodo INTERSECT sobre el rango A2:A100 (el que sea):
http://excelforo.blogspot.com.es/2011/06/vba-el-metodo-intersect.html
de tal forma que una vez seleciones alguna de esas celdas A2:A3 disponga (emplenado el método del post) en la celda contigua la imagen correspondiente.
Slds cordiales
Hola Ismael!
ResponderEliminarTengo una duda. Resulta que estoy tratando de realizar unos gráficos mediante VBA, y todo me ha funcionado muy bien en cuanto a crearlos, y cambiarle los formatos de las series. Necesitaba que cada gráfico se ajustara en un determinado rango, para lo cual ocupé (dentro del código del gráfico), este código (lo que está después de la instrucción AddChart2)
ActiveSheet.Shapes.AddChart2(233, xlLineMarkers).Select
'Desde aquí hacia abajo, asigno el Rango.
Set Rng= Range("$A$94:$D$115")
With ActiveSheet.ChartObjects
.Top = Rng.Top
.Left = Rng.Left
.Width = Rng.Width
.Height = zona.Height
Para un gráfico, funciona bien. El problema está cuando ocupo una instrucción similar (con otro rango, por ejemplo E94:H115). Al insertar este segundo gráfico, se me cambian ambos de posición.
¿Hay alguna forma de que estos no se cambien de posición?
Muchas gracias!!
Saludos,
Mauricio.
Hola Mauricio,
Eliminardiría que podrías afinar más con la posición, definiendo qué Gráfico en particular es
es decir, en lugar de
With ActiveSheet.ChartObjects
.Top = Rng.Top
...
algo más concreto
With ActiveSheet.ChartObjects(1)
.Top = Rng.Top
...
esto es, la numeración del gráfico.. así no habrá duda de a qué gráfico se refiere...
Debería ser suficiente.
Comentas cualquier cosa
Un saludo
Buen dia en mi caso quisiera que me ayudarán.
EliminarYo quisiera que en un picture de VBA de excel 2007, pudiera incluir mas de una imagen ademas que las imagenes se cambiaran cada cierto tiempo, me podrian proporcionar dicho codigo
Gracias
Hola,
Eliminaruna Picture es una imagen, que además debe existir previamente (ser algún archivo con formato de imagen...), por tanto para 'incluir mas de una imagen' tendrías que trabajarlo fuera de Excel...
Otra forma sería agrupar imágenes existentes en la hoja de cálculo (por cualquier medio), pero igualmente las imágenes debes existir.
Respecto a que cambie cada cierto tiempo, podrías emplear el método OnTime, perotendrías que aplicar alguna regla que fuera 'bailando' entre ficheros de imágenes existentes...
Lo que quiero transmitir es que una programación, de cualquier tipo, debe responder a modelos y reglas (algortimos) muy claramente definidos.
Saludos
Muy buenas,
ResponderEliminarPodrías apoyarme con una macro que logre hipervincular los nombres de varias imágenes (p.e. a.jpg, b.jpg, c.jpg, etc) que están en una columna, con las imágenes, propiamente dichas, que están en la siguiente carpeta: "D:\BancoFotos\". Para logra que con un click en el nombre de la imagen abra dicha imagen. Gracias de antemano.
Hola Juan,
Eliminartendrías que generar un evento _doubleclick en esa hoja de trabajo, de tal forma que abra el fichero (imagen .jpg) en la ruta especificada...
Escribiré un post en el blog en cuanto pueda, pero te adelanto que podrías emplear la función API ShellExecute.
Te adjunto un detalle de la ayuda de Microsoft mientras tanto.
Un cordial saludo
Seria posible extraer el icono del fichero e insertarlo en la hoja en vez de una imagen.
ResponderEliminarHola, que tal. Un gusto saludarte igualmente.
EliminarNo entiendo a qué te refieres con 'extraer el icono del fichero'....
Si puedes explicarlo algo mejor.
Saludos
he realizado un código basado en tu ejemplo que recorre una carpeta determinada y muestra la información de los ficheros en la hoja de Excel.
EliminarEl nombre, la ruta, la localización del icono(objLink:IconLocation), etc.
Ahora desearía poder extraer el icono y dibujarlo en la hoja de calculo.
Hola,
Eliminarte recomendaría emplearas la posibilidad de Insertar > Objeto...
Guarda el código, y reemplaza las rutas por las que has conseguido previamente.
Saludos cordiales
Ismael buenas tardes,
ResponderEliminarProbé con la explicación que diste para que la imagen cambiara en función de un valor de una celda adyacente. Sin embargo, al cambiar "=INCRUSTAR("Paint.Picture";"")" por =foto, me sale un mensaje de error = "La referencia no es válida" pero al probar con este código me salen todas las gráficas de la carpeta. Existe la posibilidad de vincular las dos actividades, de tal forma que cada vez que seleccione de un filtro determinado valor, me inserte únicamente la gráfica correspondiente a ese valor. Gracias por adelantado por tu ayuda.
Hola,
Eliminarrespecto al primer error que te devuelve, decirte que ese procedimiento funciona especialmente si trabajas con Excel 2007, y se deben seguir los pasos dados.. si falla algún nombre definido fallaría el modelo.
Respecto a usar el código de esta entrada para replicar esa selección individual de fotos, si, claro es posible, sería necesario eliminar la primera parte de la macro que recorre la carpeta del Banco de fotos, quedándonos y retocando las líneas 45 a 65, eliminando de ahí el recorrido que hace por las celdas con las rutas...
Bastaría entonces que le diéramos una sólo celda donde se encuentre la ruta para quedarnos con las líneas 47 a 64.
Espero haberte orientado.
Saludos
EXCELENTE!
ResponderEliminarHOLA EXCEL FORO, estaba utilizando tu macro pero al ejecutar solo me copia el listado de las imagenes de la carpeta pero no me muestra las imagenes, como puedo hacer para que me ppueda mostrar, por otro lado estube utilizando una macro -- Range("B4").Select
ResponderEliminarActiveSheet.Pictures.Insert("C:\fotos PL\PL.jpg").Select
Selection.ShapeRange.Height = 155.1417322835 --, pero cuando no encuantra una foto me arroja error, ¿como puedo hacer para que esta misma macro cuando no encuentre una imagen en la ruta simplemente no lo tome y pase a la siguiente", muchas gracias de antemano , este es mi mail si puedes ayudarme por favor, larrywiss@hotmail.com
Hola David,
Eliminaren primer lugar asegúrate que la ruta es la correcta, en el ejemplo aparece:
Ruta = "D:\BancoFotos\"
fíjate, es muy importante, de la última barra invertida \
probablemente, si las fotos existen en esa dirección, ese sea el fallo.
Para la otra cuestión, salvar la no existencia de la foto, podrías aplicar la instrucción
On Error Resume Next
.... aquí tu código
On Error GoTo 0
con esto conseguirás saltar a la siguiente instrucción de tu macro sin que te aparezca un error.
un saludo
Hola, quisiera adaptar esta macro suponiendo que los nombres de las imágenes las tengo en la columna A (Se trata del numero de expediente de un alumno), y quisiera que al ejecutar la macro se colocara en la columna B, la imagen correspondiente a cada expediente, espero me puedan ayudar, de antemano se los agradezco infinitamente....
ResponderEliminarHola Hugo
Eliminar??
no entiendo.. así es como está desarrollado en el ejemplo.
En la columna A el nombre de la imagen y en la columna B la imagen
??
Slds
Si pero en este caso, esos nombres no se necesitan cargar puesto que ya están capturados en la columna A, ahora en base a la que ya contiene esta columna A requiero que se inserten las fotos correspondientes. Dentro de mi carpeta tengo fotos numeradas del 0001 al 3000 consecutivamente, pero no requiero que se agreguen todas si no únicamente las que yo ya tenga registradas en mi columna A.
ResponderEliminarMuchas gracias por su pronta respuesta
Saludos
Hola Hugo,
Eliminarhay un par de alternativas...
Una componer con un código muy similar una función VBA que cargue la foto correspondiente en base al nombre de foto indicada.
Otra sería que del código del post quites la parte que inserta los nombres de las fotos, dejando sólo la que carga las imágenes en función de los valores de la columna A (filas 34-41 del código)
Un saludo
Estimado Excelforo Ismael Romero; he intentado su segunda alternativa quitando únicamente las lineas que insertan los nombres, sin embargo no genera ningún resultado, no marca error alguno, a lo mejor se tenga que modificar alguna parte del la función que inserta las fotos, o alguna otra variable...
EliminarAgradezco infinitamente su apreciable tiempo, saludos
... hola.
Eliminaren principio bastaría con los nombres de las fotos estuvieran en la columna A
??
Slds
Hola buenas noches tengo un problema porque nose como insertar imagenes tengo que hacer un macro de una base de datos por medio de codigo de barras y ya tengo todo pero nose como llamar las imagenes
ResponderEliminarHola Roberto,
Eliminarno termino de comprender tu problema.
Supongo dispondrás de una base de datos de imágenes.. cada imagen será un archivo (pdf, png, tif, etcétera) guardadas físicamente en alguna carpeta..
Sólo tendrás que localizar para luego importarlo a Excel siguiendo el procedimiento expuesto.
Espero haberte comprendido.
Saludos
Hola Ismael,
ResponderEliminarhe creado un excel en el que en la hoja 1 insertas los datos y 2 imagenes.
en las otras 7 hojas restantes, se autorrellenan con los datos de la hoja 1.
Mi problema es que cuando el usuario inserta la imagen vba le asigna el nº 1 y el 2.
Y depende del orden de inserción funciona Ok o no.
Yo lo he tratado así:
Sub Firmar()
'
' Firmar Macro
'
Application.ScreenUpdating = False
Sheets("Datos iniciales").Select
'Selecciona la tercera imagen insertada
Sheets("Datos iniciales").Shapes(2).Select
Selection.CopyPicture
End Sub
Las imagenes se deben insertar dentro de un rango en este caso en el rango "B39:C45"
Con el código de arriba funciona si insertan esta imagen en segundo lugar, si lo hacen en otro orden las copia al revés de lo deseado.
Sabes como puedo hacer para que no haya esa obligacion de pegar en "orden".
Gracias
Hola!
Eliminarhe releído un par de veces tu correo.. pero no termino de comprender el problema...
mejor me envías una explicación más detallada a
excelforo@gmail.com
Slds
Hola Ismael,
ResponderEliminarUna consulta como haría para cargar un imagen en una celda "D3", pero que dependa del nombre que yo le he asignado en una celda "C3". porque cuando yo hago todo el procedimiento me las carga pero no en el orden que yo las necesito.
Hola Mónica,
Eliminarla idea podría ser similar a la planteada en esta entrada, pero tratándolo como una función personalizada en VBA.. incluso algo más sencillo ya que no haría falta recorrer todos los archivos...
Slds
Hola, Gracias por tus asesorías. Esta me ha funcionado bien excepto que no me puede insertar la imagen, aparece un recuadro que dice "no se puede ver la imagen vinculada", pero la ruta esta bien, sera un tema de formato de imagen, esta en PNG. que más puede ser?, gracias.
ResponderEliminarHola Juan Manuel,
Eliminares posible sólo admita jpg, bmp y algún otro formato.
Normalmente el PNG no lo admite.
Trata de convertilas a jpg y te funcionará
:(
Saludos
Hola, aún no me funciona, si me puedes ayudar dandole una revisada te lo agradeciari mucho:
EliminarSub FicherosCarpeta()
Dim Ruta As String
Dim Fotos As Object
Dim rng As Range, celda As Range
On Error Resume Next
Application.ScreenUpdating = False
Dim img As Shape
On Error Resume Next
For Each img In ActiveSheet.Shapes
If img.Type = 11 Then img.Delete
Next
Set fso = CreateObject("Scripting.FileSystemObject")
Ruta = ("C:\Users\Leidy Moreno\Desktop\Logos CC\")
Set Carpeta = fso.GetFolder("C:\Users\Leidy Moreno\Desktop\Logos CC\")
Set ficheros = Carpeta.Files
With Range("A1")
.Value = "Ficheros de la carpeta " & ("C:\Users\Leidy Moreno\Desktop\Logos CC\")
.Font.Bold = True
End With
Range("A2").Select
For Each archivo In ficheros
ActiveCell = archivo.Name
ActiveCell.Offset(1, 0).Select
Next archivo
ActiveCell.EntireColumn.AutoFit
Set rng = Worksheets("Hoja1").Range("A2:A14")
For Each celda In rng
If Len(Trim(celda)) > 0 Then
Set r1 = Cells(celda.Row, "B")
r1.Select
Set Fotos = ActiveSheet.Pictures.Insert("C:\Users\Leidy Moreno\Desktop\Logos CC")
With Fotos
.Top = r1.Top
.Width = .Width / 1.5
.Height = .Height / 1.5
.Left = r1.Left + (r1.Width - Fotos.Width) / 2
.ShapeRange.LockAspectRatio = msoFalse
r1.EntireRow.RowHeight = .Height
.Placement = xlMoveAndSize
End With
r1.Select
End If
Next celda
Set fso = Nothing
Set Carpeta = Nothing
Set ficheros = Nothing
Set rng = Nothing
Set r1 = Nothing
Set Fotos = Nothing
Application.ScreenUpdating = True
End Sub
Tu código, a simple vista, parece correcto....
EliminarTendría que ver el fichero con el que trabajas, con su estructura y tener el banco de fotos...
Te recomiendo sigas literalmente lo expuesto, ya que está probado.
Saludos
hola Ismael y como podría insertar solo imágenes?, copie tu código en Excel 2013, pero también me insertar los nombres de otros tipos de archivo.
ResponderEliminarSe me ocurre colocar una condición con (If) en la parte de este código, pero no estoy seguro, es posible que me ayudes con esto.
'escribimos los ficheros, a partir de A2
Range("A2").Select
For Each archivo In ficheros
'escribimos el nombre del fichero
ActiveCell = archivo.Name
'bajamos una fila
ActiveCell.Offset(1, 0).Select
Next archivo
ActiveCell.EntireColumn.AutoFit
Hola,
Eliminarpuede ser una opción, colocar un IF..THEN para controlar la extensión
IF right(archivo.Name,3)="jpg" THEN
....
END IF
dentro del bucle.
Saludos
Gracias Ismael, ahora estoy intentando para guardar un rango como imagen con chart, la macro me funciona muy bien, pero cuando la automatice con un bucle para que me recorriera varios rangos y los fuera guardando, me funciona solo para dos rangos de hay en adelante me genera un error llamado "error en el método paste del objeto chart", pensaría que podría ser porque queda guardado en la memoria los objetos, pero la realidad es que no se que pueda estar ocasionando el error, sabes acerca del tema?
ResponderEliminarHola,
Eliminarno sabría decirte... prueba limpiando el portapapeles después de caca copia/pega...
Saludos
P.D.: lee, por favor, las Normas de uso del blog
Buenas Tardes Ismael,
ResponderEliminarAgradezco por tu colaboración en el tema, ha sido de gran ayuda, pero la verdad es que tengo un aproximado de 2781 imágenes las cuales ya monte en el libro de excel pero me solicitan que haga envió del archivo a un tercero para que lo pueda ver, el inconveniente es que la persona que tiene el archivo no puede ver las imágenes debido a que la macro enlazo las imágenes desde mi pc, por ende desearía tener conocimiento de como hago para que las imágenes se peguen en el libro de excel y no sea necesario las imágenes de mi pc.
MUCHAS GRACIAS.
Hola Andrés,
Eliminarprueba con lo comentado por Carlos Ramirez en el comentario siguiente (más abajo).
El método .AddPicture
.AddPicture(Filename, LinkToFile, SaveWithDocument, Left, Top, Width, Height)
permite guardar la imagen con el documento... La imagen insertada estará vinculada al archivo desde el que se creó.
Saludos
Ismael Muchísimas Gracias,
EliminarPor el momento me ha funcionado la formula pero para solo una imagen es decir, me escribe en la columna A los nombres de las 2781 imágenes pero en la columna B solo me inserta una sola imagen en todas las celdas, mira la macro que tengo es la siguiente:
Sub FicherosCarpeta()
Dim Ruta As String
Dim Fotos As Object
Dim rng As Range, celda As Range
On Error Resume Next
Application.ScreenUpdating = False
Dim img As Shape
On Error Resume Next
For Each img In ActiveSheet.Shapes
If img.Type = 11 Then img.Delete
Next
Set fso = CreateObject("Scripting.FileSystemObject")
Ruta = "D:\BancoFotos\"
Set Carpeta = fso.GetFolder(Ruta)
Set ficheros = Carpeta.Files
With Range("A1")
.Value = "Ficheros de la carpeta " & Ruta
.Font.Bold = True
End With
Range("A2").Select
For Each archivo In ficheros
ActiveCell = archivo.Name
ActiveCell.Offset(1, 0).Select
Next archivo
ActiveCell.EntireColumn.AutoFit
Set rng = Worksheets("Hoja1").Range("A2:A5")
For Each celda In rng
If Len(Trim(celda)) > 0 Then
Set r1 = Cells(celda.Row, "B")
r1.Select
Set Fotos = ActiveSheet.Shapes.AddPicture("C:\Users\User\Desktop\DIMA\02D205.jpg", True, True, 100, 100, 70, 70)
With Fotos
.Top = r1.Top
.Width = .Width / 1.5
.Height = .Height / 1.5
.Left = r1.Left + (r1.Width - Fotos.Width) / 2
.ShapeRange.LockAspectRatio = msoFalse
r1.EntireRow.RowHeight = .Height
.Placement = xlMoveAndSize
End With
r1.Select
End If
Next celda
Set fso = Nothing
Set Carpeta = Nothing
Set ficheros = Nothing
Set rng = Nothing
Set r1 = Nothing
Set Fotos = Nothing
Application.ScreenUpdating = True
End Sub
Quisiera saber si vez algún error en el que me puedas asesorar debido a que he pensado insertar los 2781 vínculos para traer todas las imágenes con la formula .AddPicture(Filename, LinkToFile, SaveWithDocument, Left, Top, Width, Height) .
MUCHISIMAS GRACIAS.
Hola,
Eliminartendrías que convertir en variable el parámetro 'filename' de
ActiveSheet.Shapes.AddPicture("C:\Users\User\Desktop\DIMA\02D205.jpg", True, True, 100, 100, 70, 70)
es decir, donde pones
C:\Users\User\Desktop\DIMA\02D205.jpg
deberías añadir un String (cadena de texto) que recoja el nombre de cada fichero...
Saludos!
Hola Ismael,
EliminarQue pena por la molestia, mira he intentado crear la variable que me ayude con este dilema que tengo,mira la verdad no soy muy bueno en VBA pero desearía saber si este string esta bien y recibir una asesoria tuya:
Dim Img As String
Img.Select
Set Fotos = ActiveSheet.Shapes.AddPicture("C:\Users\User\Pictures\Juguetes\Nombre Nuevo\=Img", True, True, 100, 100, 70, 70)
Muchs Gracias.
Si previamente has generado un String con el nombre del fichero de la imagen, más bien sería:
EliminarSet Fotos = ActiveSheet.Shapes.AddPicture("C:\Users\User\Pictures\Juguetes\Nombre Nuevo\" & img, True, True, 100, 100, 70, 70)
siendo img la variable String con el nombre de la imagen...
Saludos
hola ismael!!!
ResponderEliminartu cidog me ayudo muchisimo y funciona bien en problema es cuando mando el archivo a otra maquina, se pierde en vinculo con de la imagenes.
como puedo hacer para evitar esto?
A LOS QUE PERDIAN EL VINCULO
Eliminarde la imagen al copiar el archivo...
Solucione mi problema agregando shapes en lugar de pictures
Sheets(3).Shapes.AddPicture "C:\Users\..............\rojo.jpg", True, True, 100, 100, 70, 70
El tercer parametro indica que la imagen se copiara en el archivo de excel
lo probe y funciona perfectamente, no se pierden la imagenes al copiar a otra ubicacion
Muchas gracias por el aporte Carlos!
EliminarUn saludo
Hola,
ResponderEliminarComo podría añadir una fila entre imagen e imagen?
Muchas gracias por tu gran ayuda
Hola Rubén,
Eliminarpodrías localizar la fila donde comienza cada imagen con la propiedad .TopLeftCell, y una vez seleccionada aplicar el método Insert.
Espero te oriente
Saludos
Gracias! Voy a intentarlo. Por cierto, estoy utilizando tu macro para hacer una especie de catálogo. Mil gracias!
EliminarHola Ismael, lo he conseguido pero he usado otro método:
Eliminarinsertando la imagen cada dos filas con ActiveCell.Offset(2, 0).Select.
Tengo una ultima duda...Estoy insertando las imágenes entre bordes y haga lo que haga simpre hay un borde que me queda tapado. Lo estoy haciendo de la siguiente manera:
With Fotos
.Top = r1.Top + 5
.Width = 200
.Height = 200
.Left = r1.Left + 5
.ShapeRange.LockAspectRatio = msoFalse
.Placement = xlMoveAndSize
El +5 de Top y de Left me deja al descubierto los bordes de arriba y de la izquierda, pero de esta manera el borde inferior me queda debajo de la imagen. ¿alguna idea de como solucionarlo? Gracias!
Hola Rubén,
Eliminartendrás que ajustar el alto y ancho de la imagen al de la celda, adaptándolo según corresponda.
Saludos
El problema es que cuando redefino los valores de la imagen la celda se autoajusta a esos valores. Es decir que si también muevo manualmente el alto de la fila, la imagen también se ajusta...
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarHola. Mi problema es el mismo que exponían mis compañeros en los comienzos de este foro (hace mil años): necesitaría que las imágenes estuvieran incrustadas y no vinculadas. He leído casi todo lo escrito anteriormente por vosotros e intuyo que no tenemos solución, verdad?
ResponderEliminarMuchas gracias. Saludos
Hola Lida,
Eliminarleí en algún sitio sobre un método para conseguir lo que indicas:
Shapes.AddPicture
Buscaré algo más al respecto y subiré un post al blog.
Slds
Te lo agradecería mucho Ismael. Investigaré yo también por ahí. Gracias
ResponderEliminarUn saludo
Hola Lida, ¿encontraste alguna solución al respecto? Estamos buscando como incrustar imagenes, según el valor de 2 celdas, tipo código + color y que adquiera la imagen desde un directorio.
EliminarGracias y saludos!
Hola Pedro. En realidad yo solo busco colocar un montón de fotos que hay en una carpeta, en una columna de excel, una debajo de otra de forma estética, sin tener que hacerlo una a una. El código de este foro me lo hace perfectamente, pero las imágenes quedan vinculadas. He comprobado que una vez colocadas las imágenes, si las pego en la columna de al lado usando PEGADO ESPECIAL --> PEGAR COMO IMAGEN (y lo añado a la macro), quedarían incrustadas, pero me parece de lo más zafio jajaja. Seguiré investigando. Muchas gracias!!!
EliminarHola Lida,
Eliminaren breve subiré un post explicando cómo incrustar imágenes ;-)
Pedro,
si quieres asociar la ruta a los valores de dos celdas tendrás que componer en la fila 24 del código algo así:
Ruta=range("A1").value & "\" & range("A2").value & "\"
según la ubicación y nombre...(tipo código+color)
para componer la ubicación del fichero concreto.
Ya no haría falta recorrer la carpeta, puesto has indicado la ubicación exacta...
Slds
Este comentario ha sido eliminado por el autor.
EliminarOk, gracias :)
EliminarHola Ismael,
Eliminarcreo que no me he explicado bien. El objetivo sigue siendo incrustar imágenes que se encuentran en un directorio, el tema es que la imagen que se incruste (imágen fija), será en función a los valores de los campos de 2 celdas, por ejemplo una celda con nombre código y otro con nombre color.
Gracias por tu ayuda y saludos,
Pedro!
Este comentario ha sido eliminado por el autor.
ResponderEliminarHola a todos.
ResponderEliminarEs muy buena el excelforo.blogspot; consigues de todo; mucha información importante... Mi caso no lo he conseguido, ya me tiene verde con dolor de cabeza y pienso que no es muy complicado, pero no domino el tema, solo lo básico.
Me explico: Tengo un archivo en excel 2007, el cual consiste en Evaluar a un Grupo de Funcionarios en su labor diaria. Los resultados me lo da la Hoja3, en donde se exponen quienes fueron los mas destacados; el trabajo ya lo tengo casi listo. Lo que deseo saber es si es posible que automáticamente se presente la foto tipo carnet utilizando el Control ActiveX, y le explico el porque, porque a través de ésta herramienta me permite presentar la foto en donde se quiere; hasta la fecha no lo he logrado.
Tengo la ruta c:\COP\ en donde se guardan las fotos, las fotos son .JPG, de tamaño pequeñas de poco kb. Las fotos tienen el mismo nombre del código que se utiliza para llamarlas a las celdas. Es un archivo que a diario se modifica varia siempre los 1er, 2do y 3er lugar; por lo que deseo que las imágenes no se monten sobre otra, sino que cada vez que haya variación en el orden de mérito se reemplace la foto por la otra o se borre una y se coloque la otra que se solicita automáticamente.
También puede ser a través de un Botón que se realice la acción de colocar la foto o actualizar el archivo.
Otra cosa que me he dado cuenta es que como trabajo con formulas, el código que llama a la foto es un formula y no el nombre de la foto; por lo que pensé que se pudiera trabajar de forma manual en otra celda, colocando el nombre del archivofoto en una celda inmediata a la celda donde va la foto.
Ahorita tengo en Hoja3 el código en las celdas:
B16 para 1er lugar y la foto para ella en las celdas combinadas N11xQ11:N19xQ19
B17=2do Lugar, Foto en N23xQ23:N31xQ31
B18=3er Lugar, Foto en N35xQ35:N43xQ43
También creo que me funcionaría manteniendo lo anterior, pero hago un llamado a la celda Q10=B16 para el 1er lugar. Q22=B17 para el 2do Lugar y Q34=B18 para el 3er lugar. De sea forma se podría llamar a la foto automaticamente a las mismas celdas ya combinadas; pero de forma manual sin dañar la formula de B16, B17 y B18.
Espero me haya explicado; agradecería el apoyo a los muy respetados Expertos. Por favor.
Hola,
Eliminarel asunto de añadir imágenes/fotos es siempre delicado.
Puedes echa un vistazo también a:
http://excelforo.blogspot.com.es/2016/05/vba-el-metodo-shapesaddpicture-para.html
Espero te oriente
Saludos
Hola !
ResponderEliminarMuy buena la pagina y los ejemplos.
Te consulto ...
Tengo una planilla con la que trabajo para hacer catalogo con precios y fotos.
El siguiente codigo me permite insertar la foto del producto en una celda en cada una de las filas que contiene cada articulo de la lista.
El codigo funciona perfecto en excel 2003 .... pero en excel 2007 no me incluye fisicamente la foto sino una referencia a la foto y esto no me sirva ya que no envio la carpeta con las fotos a mis clientes ( o sea en 2007 funciona perfecto localmente , pero no al usar el archivo en otra maquina )
Me podrias indicar que modificar para que el codigo funcione en excel 2007
-----
While ActiveCell.Value <> ""
valor = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
ActiveSheet.Pictures.Insert(ThisWorkbook.Path & "\foto\" & valor & ".jpg").Select
With Selection
.ShapeRange.LockAspectRatio = msoFalse
.ShapeRange.Height = 148 'Alto de la imagen
.ShapeRange.Width = 148 'Ancho de la imagen
.ShapeRange.Left = .ShapeRange.Left + 1 'Añadimos 1 para que se vea la línea divisoria de la celda (izquierda)
.ShapeRange.Top = .ShapeRange.Top + 1 'Añadimos 1 para que se vea la línea divisoria de la celda (superior)
End With
ActiveCell.Offset(0, -1).Select
cuenta = cuenta + 1
ActiveCell.Offset(1, 0).Select
Wend
---------
Desde ya muchas gracias.
romi
Hola!
Eliminarecha un vistazo a este post:
http://excelforo.blogspot.com.es/2016/05/vba-el-metodo-shapesaddpicture-para.html
Saludos