Saltar al contenido

Insertar Imagen desde una celda con una url Web


Recommended Posts

estoy usando ese código de josapu para una aplicación de catálogos la idea es tener la base de datos de fotos en un servidor de imágenes y citarlas basado en este codigo:


[COLOR=#333333][COLOR=#333333]Sub imagenweb()[/COLOR][/COLOR]

[COLOR=#333333][COLOR=#333333]Dim URL As String[/COLOR][/COLOR]
[COLOR=#333333][COLOR=#333333]URL = "http://images.smartsms.com.ar/picture/thumbs/nokia/nokia-c5-03.jpg"[/COLOR][/COLOR]
[COLOR=#333333][COLOR=#333333]Range("C5").Select[/COLOR][/COLOR]

[COLOR=#333333][COLOR=#333333]ActiveSheet.Pictures.Insert(URL).Select[/COLOR][/COLOR]

[COLOR=#333333][COLOR=#333333]End Sub[/COLOR][/COLOR][/CODE]

[color=#333333][color=#333333]

lo que necesito es almacenar la url en una celda de modo que despues de cargar digamos 20 url las pueda ejecutar el boton y las imagenes se cargen al catalogo

asi

[/color][/color]

[CODE]
[COLOR=#333333][COLOR=#333333]Sub imagenweb()[/COLOR][/COLOR]

[COLOR=#333333][COLOR=#333333]Dim URL As String[/COLOR][/COLOR]
[COLOR=#333333][COLOR=#333333]URL = "([/COLOR][/COLOR][COLOR=#ff0000]aqui necesito meter la celda en la cual almaceno la url ej B3[/COLOR][COLOR=#333333][COLOR=#333333])"[/COLOR][/COLOR]
[COLOR=#333333][COLOR=#333333]Range("C5").Select
[/COLOR][/COLOR]
[COLOR=#333333]y aquí se repite el codigo para otras celdas donde se guardan urls etc..[/COLOR]
[/CODE]

[color=#333333] el comando funciona perfecto en excel 2010 XD.[/color]

[color=#333333]por otro lado y lo principal, quiero hacer que la macro tome la url desde una celda y no desde la linea de codigo [/color]

[color=#333333]de antemano gracias por su ayuda estoy seguro que les va a tomar un segundo resolverlo [/color]:D

IMAGEN WEB.zip

Enlace a comentario
Compartir con otras webs

Hola,

antes que nada felicitar a Gengis Khan por su aporte, funciona a la perfección.

he publicado en mi blog una entrada que puede interesar como complemento al aporte de Gengis Khan, ya que la descarga de archivos puede ser lenta si se hace uno a la vez y si son muchos archivos, puede tomar bastante tiempo. La técnica que uso allí para descargar archivos de manera asincrónica (no se detiene el proceso mientras se descarga un archivo sino que pasa sin detenerse a ejecutar la siguiente descarga) es un técnica sencilla pero poderosa (no sólo para este caso sino para muchos otros).

Consiste en escribir un vbscript que haga el trabajo que se requiere y ejecutarlo con Shell, que ejecuta el programa de manera asincrónica. Esto es: no espera a que se termine la ejecución del programa ejecutado con Shell sino que devuelve inmediatamente el control al programa que llama la función, dejando el otro proceso en ejecución. Mientras tanto, podemos continuar con la ejecución de un nuevo VBScript y así sucesivamente.

EXCELPATAS: Descargar archivos de internet de manera asincrónica con VBScript

Te dejo el archivo con la macro de Gengis (descarga sincrónica) y con la macro para descarga asincrónica.

IMAGEN WEB GK (1).xls

Enlace a comentario
Compartir con otras webs

he publicado en mi blog una entrada que puede interesar como complemento al aporte de Gengis Khan, ya que la descarga de archivos puede ser lenta si se hace uno a la vez y si son muchos archivos, puede tomar bastante tiempo. La técnica que uso allí para descargar archivos de manera asincrónica (no se detiene el proceso mientras se descarga un archivo sino que pasa sin detenerse a ejecutar la siguiente descarga) es un técnica sencilla pero poderosa (no sólo para este caso sino para muchos otros).

Consiste en escribir un vbscript que haga el trabajo que se requiere y ejecutarlo con Shell, que ejecuta el programa de manera asincrónica. Esto es: no espera a que se termine la ejecución del programa ejecutado con Shell sino que devuelve inmediatamente el control al programa que llama la función, dejando el otro proceso en ejecución. Mientras tanto, podemos continuar con la ejecución de un nuevo VBScript y así sucesivamente.

Excelente aporte! Lo estudiare mas a fondo del metodo que empleaste a usar un webbrowser... lo de los VBScript ya lo habia visto en una pagina donde se simulaba la multitarea en una hoja de Excel, pero tu ejemplo se ve mas claro!

Sin duda alguna con este tipo de ejmplos esta mas que claro que podemos hacer uso de Servicios Web y recuperar/procesar datos de paginas web.

Yo en estos momento me encuentro programando en VBA/Excel una macro que extraera informacion de diversas empresas de un portal web, ya he recuperado la mayor parte de los datos, ahora el unico reto a vencer es el siguiente:

El correo de dichas empresas, no es texto, si no se trata de una imagen donde viene el correo de la empresa y yo necesito el texto para poder hacer una campaña de envios masivos... has el momento se me ocurre descargar las imagenes y despues ingeniarmelas para extraer el texto de dichas imagenes ya sea utilizando VB o Python, ya veremos!

Saludos!

Enlace a comentario
Compartir con otras webs

maestro digital,

una alegría recibir tu comentario. La técnica no es la más elegante y de hecho, para hacer algo más robusto quizás usuaría (dependiendo de la necesidad específica) winhttp, xmlhtto o, incluso, el control webbrowser y módulos de clase , con los cuales también se puede trabajar de manera asincrónica y de una forma un poco más elegante.

La técnica es la misma para xmlhtto y winhttp. Para el control webbrowser la técnica es un poco más sencilla porque maneja el evento documentcomplete, que puedes usar en un módulo de clase y ya no necesitas el do while ie.readystate = 4 o como sea porque es lo que verifica el evento que se dispara cuando readystate = 4.

Para usarlo en un módulo de clase y tener acceso a los eventos quizás este tema aporte algo:

https://www.ayudaexcel.com/foro/macros-programacion-vba-10/importar-dato-internet-26376/

Y bueno, lo de sacar el texto de las imágenes, eso tienes que compartirlo cuando lo logres. No me has preguntado :), pero si lo hicieras, quizás lo primero que yo haría sería buscar si ya existe alguna api disponible en la web que haga eso.

Te deseo lo mejor en tu proyecto, aunque de sobra sé que te irá muy bien.

Enlace a comentario
Compartir con otras webs

una alegría recibir tu comentario. La técnica no es la más elegante y de hecho, para hacer algo más robusto quizás usuaría (dependiendo de la necesidad específica) winhttp, xmlhtto o, incluso, el control webbrowser y módulos de clase , con los cuales también se puede trabajar de manera asincrónica y de una forma un poco más elegante.

La técnica es la misma para xmlhtto y winhttp. Para el control webbrowser la técnica es un poco más sencilla porque maneja el evento documentcomplete, que puedes usar en un módulo de clase y ya no necesitas el do while ie.readystate = 4 o como sea porque es lo que verifica el evento que se dispara cuando readystate = 4.

Para usarlo en un módulo de clase y tener acceso a los eventos quizás este tema aporte algo:

https://www.ayudaexcel.com/foro/macros-programacion-vba-10/importar-dato-internet-26376/

Y bueno, lo de sacar el texto de las imágenes, eso tienes que compartirlo cuando lo logres. No me has preguntado :), pero si lo hicieras, quizás lo primero que yo haría sería buscar si ya existe alguna api disponible en la web que haga eso.

Te deseo lo mejor en tu proyecto, aunque de sobra sé que te irá muy bien.

Hola Mauricio... ya me di una vuelta por tu blog tienes buenos aportes y me llamaron la atencio lo de la hora de cualquier pais y este de las imagenes! Excelentes!

Respecto a lo de extraer texto en las imagenes... ya lo intente con python usando pytesser funciona, pero no a la perfeccion tengo algunos problemas con algunas letras, ademas de que la imagen no debe ser tan pequeña, ahora intentare en vba utilizando MODI pero ayer no supe como instalar la dll en mi sistema, investigare, mas adelante compartire los avances, Saludos!

Enlace a comentario
Compartir con otras webs

ya termine el codigo para mi catalogo. para gengis muchisimas gracias pòr su ayuda y buena voluntad, me ahorro muchisimas horas de trabajo.

Con algo de improvisacion por que llevo 10 dias en el mundo de las macros; El código quedo así para mi aplicación, para mjrofra tiene razon para cargar 20 imagenes el tiempo promedio de carga por imagen es de 1.46 segundos, esos son dos minutos treinta para 100 imagenes a la vez. me gustaria tercerizar el proceso, si me puede sugerir como le agradezco.

ak les dejo el codigo para que me den sus opiniones y sugerencias a todos muchas gracias por su atención ( el if y salto go to. se deben a que fue lo único que se me ocurrió para evitar desorden en el resultado de la hoja.) ustedes juzguen.

Sub CARGAR_20_FOTOS(): On Error Resume Next

'
'CODIGO LISTO Y TERMINADO
Application.ScreenUpdating = False
For Each imagen In Sheets("CATALOGO ESTANDAR").Shapes 'Elimina las imágenes URL que hubiese
If imagen.Name Like "ImagenURL*" Then imagen.Delete
Next



Dim URL As String

Sheets("BASE DE DATOS").Select
URL = Range("AI2").Value 'Obtiene la URL de la celda QUE LA CONTIENE
If Range("AI2").Value Like "" Then
GoTo SALTO1
Else:
Sheets("CATALOGO ESTANDAR").Select
Sheets("CATALOGO ESTANDAR").Pictures.Insert(URL).Select
With Selection.ShapeRange
.Name = "ImagenURL_A320:L330 " 'CASILLA DE DESTINO CON NOMBRE DE RANGO DONDE ESTA LA IMAGEN
.LockAspectRatio = False 'Permite modificar la imagen
.Top = Range("A5:L15").Top + 0 'Distancia al borde superior EN EL RANGO DONDE ESTA UBICADA LA FOTO
.Left = Range("A5:L15").Left + 0 'Distancia al borde izquierdo EN EL RANGO DONDE ESTA UBICADA LA FOTO
.Height = Range("A5:L15").Height - 0 'Alto de la imagen EN EL RANGO DONDE ESTA UBICADA LA FOTO
.Width = Range("A5:L15").Width - 0 'Ancho de la imagen EN EL RANGO DONDE VA LA IMAGEN
End With
End If
SALTO1:



Sheets("BASE DE DATOS").Select
URL = Range("AJ2").Value 'Obtiene la URL de la celda QUE LA CONTIENE
If Range("AJ2").Value Like "" Then
GoTo SALTO121
Else:
Sheets("CATALOGO ESTANDAR").Select
Sheets("CATALOGO ESTANDAR").Pictures.Insert(URL).Select
With Selection.ShapeRange
.Name = "ImagenURL_N5:Y15 " 'CASILLA DE DESTINO CON NOMBRE DE RANGO DONDE ESTA LA IMAGEN
.LockAspectRatio = False 'Permite modificar la imagen
.Top = Range("N5:Y15").Top + 0 'Distancia al borde superior EN EL RANGO DONDE ESTA UBICADA LA FOTO
.Left = Range("N5:Y15").Left + 0 'Distancia al borde izquierdo EN EL RANGO DONDE ESTA UBICADA LA FOTO
.Height = Range("N5:Y15").Height - 0 'Alto de la imagen EN EL RANGO DONDE ESTA UBICADA LA FOTO
.Width = Range("N5:Y15").Width - 0 'Ancho de la imagen EN EL RANGO DONDE VA LA IMAGEN
End With
End If
SALTO121:[/CODE]

y asi susesivamente... hasta 600 fotos

como soy usuario nuevo en el foro no se como dejarlo como solucionado que gran comunidad! :love_heart::love_heart: :eagerness:

Enlace a comentario
Compartir con otras webs

  • 1 year later...
Hola,

antes que nada felicitar a Gengis Khan por su aporte, funciona a la perfección.

he publicado en mi blog una entrada que puede interesar como complemento al aporte de Gengis Khan, ya que la descarga de archivos puede ser lenta si se hace uno a la vez y si son muchos archivos, puede tomar bastante tiempo. La técnica que uso allí para descargar archivos de manera asincrónica (no se detiene el proceso mientras se descarga un archivo sino que pasa sin detenerse a ejecutar la siguiente descarga) es un técnica sencilla pero poderosa (no sólo para este caso sino para muchos otros).

Consiste en escribir un vbscript que haga el trabajo que se requiere y ejecutarlo con Shell, que ejecuta el programa de manera asincrónica. Esto es: no espera a que se termine la ejecución del programa ejecutado con Shell sino que devuelve inmediatamente el control al programa que llama la función, dejando el otro proceso en ejecución. Mientras tanto, podemos continuar con la ejecución de un nuevo VBScript y así sucesivamente.

EXCELPATAS: Descargar archivos de internet de manera asincrónica con VBScript

Te dejo el archivo con la macro de Gengis (descarga sincrónica) y con la macro para descarga asincrónica.

@[uSER=14326]mjrofra[/uSER] excelente este aporte pero si yo quisiera almacenar las imagenes descargadas en una carpeta, como modificar la macro.

Gracias.

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.