Imagenes vinculadas via codigo

07/01/2010 - 18:04 por jsilva69 | Informe spam
Hola!

Se que hay varias soluciones puntuales sobre el tema, pero no logro
dar en la tecla.

Tengo una hoja (Personal) con los datos personales (Legajo, Apellido y
Nombre, etc...), incluyendo un campo Foto donde hago referencia a la
direccion donde se encuentra fisicamente la foto (en mi ejemplo, "\
\hspc1\publico\sarda\personal\fotos\0754.jpg" para el legajo 0754)

En otra hoja (Credenciales) con las plantillas de las credenciales.
Como las imprimo en hojas A4 y despues las recorto, tengo muchas, y de
cantidad variable, o sea que no tengo una sola. En el rango de celdas
donde va la foto, coloco el valor del campo Foto correspondiente a
cada credencial, a traves de un INDIRECTO... etc.

Mi idea era, en cada rango de celdas donde va la foto, insertar un
control Imagen, y despues, por codigo, modificar la propiedad Picture
con el valor de la celda adonde esta insertado el control.
Eventualmente tambien cambiar la propiedad PictureSizeMode a 3
(PicureSizeModeZoom).

Me imagino que se haria mediante un "for each shape in activesheet" o
algo asi, pero no estoy muy ducho con eso. Todo eso, en el caso de que
cada control tenga asignada la celda de donde levando la direccion de
la foto...

Espero haberme hecho entender.

Preguntas similare

Leer las respuestas

#1 jsilva69
07/01/2010 - 18:10 | Informe spam
Me olvide de aclarar, es Excel 2003. Gracias.
Respuesta Responder a este mensaje
#2 Héctor Miguel
07/01/2010 - 20:06 | Informe spam
hola, !

(efectivamente) hay varias soluciones puntuales para cada consulta puntual (y para este caso...)
solo necesitaras indicar en el codigo que cada vez que encuentre un "for each shape..."
=> de donde tomaria (o como construir) su "each... picture/foto/imagen/archivo/legajo/... ???)

saludos,
hector.

__ OP __
Se que hay varias soluciones puntuales sobre el tema, pero no logro dar en la tecla.
Tengo una hoja (Personal) con los datos personales (Legajo, Apellido y Nombre, etc...)
incluyendo un campo Foto donde hago referencia a la direccion donde se encuentra fisicamente la foto
(en mi ejemplo, "\\hspc1\publico\sarda\personal\fotos\0754.jpg" para el legajo 0754)
En otra hoja (Credenciales) con las plantillas de las credenciales.
Como las imprimo en hojas A4 y despues las recorto, tengo muchas, y de cantidad variable, o sea que no tengo una sola.
En el rango de celdas donde va la foto, coloco el valor del campo Foto correspondiente a cada credencial, a traves de un INDIRECTO... etc.
Mi idea era, en cada rango de celdas donde va la foto, insertar un control Imagen, y despues, por codigo
modificar la propiedad Picture con el valor de la celda adonde esta insertado el control.
Eventualmente tambien cambiar la propiedad PictureSizeMode a 3 (PicureSizeModeZoom).
Me imagino que se haria mediante un "for each shape in activesheet" o algo asi, pero no estoy muy ducho con eso.
Todo eso, en el caso de que cada control tenga asignada la celda de donde levando la direccion de la foto...
Respuesta Responder a este mensaje
#3 jsilva69
08/01/2010 - 21:26 | Informe spam
Gracias, HM!

Me salio... medio chapucero, pero bue...

Sub FotoLegajo()
Dim Fila As Long, Columna As Long, Ruta As String, Foto As String

*** Llamo a EliminarFotos para no tener fotos superpuestas...

Call EliminarFotos

***A1:O239 es el rango de impresion... como podria hacer para
utilizar directamente ActiveSheet.PageSetup.PrintArea?

For Each c In Range("A1:O239")

***Las fotos estan siempre en las celdas B5, B15, B25... G5, G15,
G25... L5, L15, L25...

c.Select
If (Selection.Row + 5) Mod 10 = 0 And _
(Selection.Column + 3) Mod 5 = 0 Then
Fila = Selection.Row
Columna = Selection.Column
If Not (IsEmpty(Selection.Value)) Then
Ruta = Left(Selection.Value, Len(Selection.Value) - 8)
Foto = Left(Right(Selection.Value, 8), 4)
Else
Ruta = ""
Foto = ""
End If

If Left(Ruta, 2) = "\\" Then
InsertarFoto Fila, Columna, Ruta, Foto
End If
End If
Next

End Sub

Sub InsertarFoto(Fila As Long, Columna As Long, Ruta As String,
FileName As String)

On Error Resume Next

*** A las fotos las diferencio de otras imagenes que hay en la
credencial (logo, firma) poniendole como nombre el numero de legajo, y
adelante un _
ActiveSheet.Shapes("_" + FileName).Delete

ActiveSheet.Pictures.Insert(Ruta + FileName + ".jpg").Select
Selection.ShapeRange.Name = "_" + FileName

*** Y aca toqueteo la fotos para que queden mas o menos centradas en
el cuadradito tipo "foto carnet"

Selection.ShapeRange.PictureFormat.CropLeft = 27.75
Selection.ShapeRange.PictureFormat.CropRight = 27.75
Selection.ShapeRange.IncrementTop 0.5
Selection.ShapeRange.IncrementLeft -27.25
Selection.ShapeRange.ScaleWidth 0.4175, msoFalse,
msoScaleFromTopLeft
Selection.ShapeRange.ScaleHeight 0.4175, msoFalse,
msoScaleFromTopLeft

End Sub

Sub EliminarFotos()

For Each f In ActiveSheet.Shapes
If Left(f.Name, 1) = "_" Then
f.Delete
End If
Next

End Sub

Se que ustedes son unos genios, asi que seguro le encuentran una
optimizacion a esta solucion. Escucho alternativas!

Y desde ya, muchas gracias.

Julio.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida