Imágenes distorsionadas al pegarlas en Excel desde página web

05/04/2007 - 03:02 por José Manuel | Informe spam
Hola a todos:
Soy usuario medio de Excel, uso Excel 97-2000 y estoy intentando, sin
éxito, copiar "al vuelo" (sin guardar en archivo) imágenes desde
páginas web hacia un rango determinado en una hoja de cálculo. Ocurre
que, si estas imágenes son alargadas,me aparecen distorsionadas.
El código que uso es el siguiente:

*****************************************************************
Sub ImportarImagenWeb()
Dim Foto As Object, _
Arriba As Double, Izquierda As Double, Ancho As Double, Alto
As Double
Application.ScreenUpdating = False
On Error Resume Next
Set Foto = ActiveSheet.Pictures.Paste
With Sheets(1).Range("a1:b5")
Arriba = .Top
Izquierda = .Left
Ancho = .Offset(0, .Columns.Count).Left - .Left
Alto = .Offset(.Rows.Count, 0).Top - .Top
End With
With Foto
.Top = Arriba
.Left = Izquierda
.Width = Ancho
.Height = Alto
End With
Set Foto = Nothing
End Sub
*****************************************************************

¿Podéis echarme una mano? Gracias de antemano.

Saludos.

José Manuel

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
05/04/2007 - 03:53 | Informe spam
hola, José Manuel !

... estoy intentando... copiar "al vuelo" (sin guardar en archivo) imagenes desde paginas web hacia un rango determinado
... si estas imagenes son alargadas, me aparecen distorsionadas...



1) al hacer el 'copy' de la imagen desde la pagina web, la imagen 'se viene' con sus dimensiones 'originales' [alto y ancho]

2) al hacer el -> ActiveSheet.Pictures.Paste [logicamente] la imagen 'mantiene' sus dimensiones originales

3) si resulta que el rango donde quieres 'encajar' la imagen [A1:B5] es de dimensiones diferentes [alto y ancho]
-> al 'ajustar' las dimensiones de la imagen 'pegada' no creo que puedas evitar distorsiones [para dimensiones diferentes] -?-

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ el codigo expuesto __
Sub ImportarImagenWeb()
Dim Foto As Object, _
Arriba As Double, Izquierda As Double, Ancho As Double, Alto As Double
Application.ScreenUpdating = False
On Error Resume Next
Set Foto = ActiveSheet.Pictures.Paste
With Sheets(1).Range("a1:b5")
Arriba = .Top
Izquierda = .Left
Ancho = .Offset(0, .Columns.Count).Left - .Left
Alto = .Offset(.Rows.Count, 0).Top - .Top
End With
With Foto
.Top = Arriba
.Left = Izquierda
.Width = Ancho
.Height = Alto
End With
Set Foto = Nothing
End Sub
Respuesta Responder a este mensaje
#2 José Manuel
05/04/2007 - 11:28 | Informe spam
On 5 abr, 03:53, "Héctor Miguel"
wrote:
hola, José Manuel !

> ... estoy intentando... copiar "al vuelo" (sin guardar en archivo) imagenes desde paginas web hacia un rango determinado
> ... si estas imagenes son alargadas, me aparecen distorsionadas...

1) al hacer el 'copy' de la imagen desde la pagina web, la imagen 'se viene' con sus dimensiones 'originales' [alto y ancho]

2) al hacer el -> ActiveSheet.Pictures.Paste [logicamente] la imagen 'mantiene' sus dimensiones originales

3) si resulta que el rango donde quieres 'encajar' la imagen [A1:B5] es de dimensiones diferentes [alto y ancho]
-> al 'ajustar' las dimensiones de la imagen 'pegada' no creo que puedas evitar distorsiones [para dimensiones diferentes] -?-

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ el codigo expuesto __
Sub ImportarImagenWeb()
Dim Foto As Object, _
Arriba As Double, Izquierda As Double, Ancho As Double, Alto As Double
Application.ScreenUpdating = False
On Error Resume Next
Set Foto = ActiveSheet.Pictures.Paste
With Sheets(1).Range("a1:b5")
Arriba = .Top
Izquierda = .Left
Ancho = .Offset(0, .Columns.Count).Left - .Left
Alto = .Offset(.Rows.Count, 0).Top - .Top
End With
With Foto
.Top = Arriba
.Left = Izquierda
.Width = Ancho
.Height = Alto
End With
Set Foto = Nothing
End Sub



Hola, Héctor

Gracias por contestarme. Queda claro que no puedo reducir la imagen a
las coordenadas A1:B5 sin que la imagen pegada se distorsione. La
verdad es que me gustaría obligar a la imagen a adaptarse a esas
coordenadas, pero, en fin, lo único que me interesa es que la imagen
ocupe el menor espacio posible y poder ampliarla ejecutando un
procedimiento haciendo doble clic, por ejemplo, en el interior de la
imagen (éste es otro tema, que también me gustaría enfocar
correctamente). Ya me ha ocurrido que se me ha corrompido un libro que
contenía numerosas imágenes y he de procurar que la nueva hoja ocupe
lo menos posible.

Para evitar la distorsión dichosa, he encontrado, buscando (que yo de
código VBE sé más bien poco), la siguiente macro, que funciona:

*************************************************************
Sub CargarImagenSinDistorsion()
Dim picImagen As Picture
'Seleccionar la celda donde estará el ángulo superior izquierdo de la
imagen
ActiveSheet.Range("a1").Select
'Cargar la imagen
Set picImagen = ActiveSheet.Pictures.Paste
'Ajustar la imagen al 51% de su tamaño original, manteniendo sus
proporciones
picImagen.ShapeRange.ScaleWidth 0.51, msoFalse,
msoScaleFromTopLeft
picImagen.ShapeRange.ScaleHeight 0.51, msoFalse,
msoScaleFromTopLeft
Set picImagen = Nothing
End Sub

*************************************************************

Un cordial saludo ... y gracias de nuevo.

José Manuel
Respuesta Responder a este mensaje
#3 Héctor Miguel
05/04/2007 - 23:38 | Informe spam
hola, José Manuel !

1) comentas de corrupcion de archivos por 'exceso' de imagenes incrustadas...
seria bueno conocer de cuantas imagenes 'estariamos hablando' :))

2) 'esperando' que no se trate de 'armar un catalogo de productos'...
te sugeriria incrustar control/es 'Image' de la barra de herramientas cuadro de controles
a los que puedes 'cargarles' imagenes y dejarlo/s 'vacio/s' con lo que te 'ahorras' totalmente el espacio de las mismas
[solo que las imagenes seria preferible tomarlas desde tu disco duro... o bajarlas al mismo desde la pagina web] -?-

3) con relacion al 'factor de ajuste', conservando las proporciones...
si el 51% es aplicable siempre a las imagenes que 'traes' desde la pagina web... 'asunto arreglado' :))
en caso de que no... habria que 'decidir' si ajustas la proporcion en relacion con el ancho o el alto [imagen <-> rango] -?-

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
Queda claro que no puedo reducir la imagen a las coordenadas A1:B5 sin que la imagen pegada se distorsione.
La verdad es que me gustaria obligar a la imagen a adaptarse a esas coordenadas, pero, en fin
lo unico que me interesa es que la imagen ocupe el menor espacio posible y poder ampliarla ejecutando un procedimiento
haciendo doble clic, por ejemplo, en el interior de la imagen (este es otro tema, que también me gustaría enfocar correctamente).
Ya me ha ocurrido que se me ha corrompido un libro que contenia numerosas imagenes
y he de procurar que la nueva hoja ocupe lo menos posible.
Para evitar la distorsion dichosa, he encontrado... la siguiente macro, que funciona:


__ el codigo expuesto __
Sub CargarImagenSinDistorsion()
Dim picImagen As Picture
'Seleccionar la celda donde estará el ángulo superior izquierdo de la imagen
ActiveSheet.Range("a1").Select
'Cargar la imagen
Set picImagen = ActiveSheet.Pictures.Paste
'Ajustar la imagen al 51% de su tamaño original, manteniendo sus proporciones
picImagen.ShapeRange.ScaleWidth 0.51, msoFalse, msoScaleFromTopLeft
picImagen.ShapeRange.ScaleHeight 0.51, msoFalse, msoScaleFromTopLeft
Set picImagen = Nothing
End Sub
Respuesta Responder a este mensaje
#4 José Manuel
06/04/2007 - 02:38 | Informe spam
On 5 abr, 23:38, "Héctor Miguel"
wrote:
hola, José Manuel !

1) comentas de corrupcion de archivos por 'exceso' de imagenes incrustadas...
seria bueno conocer de cuantas imagenes 'estariamos hablando' :))

2) 'esperando' que no se trate de 'armar un catalogo de productos'...
te sugeriria incrustar control/es 'Image' de la barra de herramientas cuadro de controles
a los que puedes 'cargarles' imagenes y dejarlo/s 'vacio/s' con lo que te 'ahorras' totalmente el espacio de las mismas
[solo que las imagenes seria preferible tomarlas desde tu disco duro... o bajarlas al mismo desde la pagina web] -?-

3) con relacion al 'factor de ajuste', conservando las proporciones...
si el 51% es aplicable siempre a las imagenes que 'traes' desde la pagina web... 'asunto arreglado' :))
en caso de que no... habria que 'decidir' si ajustas la proporcion en relacion con el ancho o el alto [imagen <-> rango] -?-

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __> Queda claro que no puedo reducir la imagen a las coordenadas A1:B5 sin que la imagen pegada se distorsione.
> La verdad es que me gustaria obligar a la imagen a adaptarse a esas coordenadas, pero, en fin
> lo unico que me interesa es que la imagen ocupe el menor espacio posible y poder ampliarla ejecutando un procedimiento
> haciendo doble clic, por ejemplo, en el interior de la imagen (este es otro tema, que también me gustaría enfocar correctamente).
> Ya me ha ocurrido que se me ha corrompido un libro que contenia numerosas imagenes
> y he de procurar que la nueva hoja ocupe lo menos posible.
> Para evitar la distorsion dichosa, he encontrado... la siguiente macro, que funciona:

__ el codigo expuesto __
Sub CargarImagenSinDistorsion()
Dim picImagen As Picture
'Seleccionar la celda donde estará el ángulo superior izquierdo de la imagen
ActiveSheet.Range("a1").Select
'Cargar la imagen
Set picImagen = ActiveSheet.Pictures.Paste
'Ajustar la imagen al 51% de su tamaño original, manteniendo sus proporciones
picImagen.ShapeRange.ScaleWidth 0.51, msoFalse, msoScaleFromTopLeft
picImagen.ShapeRange.ScaleHeight 0.51, msoFalse, msoScaleFromTopLeft
Set picImagen = Nothing
End Sub



Hola, Héctor:

De nuevo, gracias. Intentaré precisar las cuestiones que me comentas.

1, Calculo que estamos hablando, aproximadamente, de unas 700 imágenes
(aunque ya no puedo entrar en el fichero). El archivo ocupaba 14 Mb
aprox.

2, No estoy haciendo un catálogo de productos. Simplemente, mediante
evento, vinculo las imágenes a textos en otra hoja, lo que me
resultaba bastante ágil, aunque, seguro, no era la forma idónea de
hacer las cosas. Lo que sugieres en este punto (un control) me parece
muy interesante, pero me gustaría saber cómo hacerlo. Creo, por otra
parte, que al tener que guardar la imagen, se perdería agilidad.

3, También en este punto, he de tomar en cuenta tu sugerencia. En
efecto, no siempre el 51% será el factor de ajuste adecuado, pues
dependerá del tamaño de la imagen en origen. Creo, si no te he
entendido mal, que la precisión habría que adaptarla al ancho de la
columna.

Un cordial saludo.

José Manuel
Respuesta Responder a este mensaje
#5 Héctor Miguel
06/04/2007 - 03:07 | Informe spam
hola, José Manuel !

... estamos hablando, aproximadamente, de unas 700 imagenes... El archivo ocupaba 14 Mb aprox.
... mediante evento, vinculo las imagenes a textos en otra hoja, lo que me resultaba bastante agil
... en este punto (un control) me parece muy interesante, pero me gustaria saber como hacerlo
... por otra parte, que al tener que guardar la imagen, se perderia agilidad...



1) 'asumiendo' que de las ~700 imagenes solo es necesario mostrar una, otra u otra [es decir... una por vez]
[creo] si seria mas agil conservar las imagenes en DD y cargarlas [por evento] a un control 'Image'
[ademas de la mejora en el 'peso' del archivo, ya que no se conservarian las imagenes incrustadas] <= OJO

2) hasta ahora, solo has expuesto el codigo para el 'pegado' de la imagen, pero... -> 'como' estas haciendo el 'copy' ?
si lo estas haciendo 'al vuelo' [es decir, 'vas' al internet, abres la pagina, seleccionas la imagen y haces el copy]...
[como que no le veo la 'agilidad' al proceso] -?-
o tienes ya alguna macro que haga lo del copiar la imagen ?

existen ya bastantes consultas acerca del tema de las imagenes [funciones y macros con diversos 'controles']
pero creo que todavia hay algunos detalles que no has dejado salir a la luz -?-

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida