Hablando de Imagnes

13/09/2007 - 22:21 por Daniel SL | Informe spam
Hola a todos

Hablando de imganes tengo este detalle que por mas que le doy vuelta no lo
resuelvo hace tiempo el buen amigo Héctor Miguel me dio este codigo y funcio
a la perfección para lo que fue hecho, nada mas que ahora lo quiero ocupar
con una variante el codigo es el siguiente:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Address = "$C$2" Then Exit Sub
Dim De_donde As String, Foto As Object, _
Arriba As Double, Izquierda As Double, Ancho As Double, Alto As
Double
Application.ScreenUpdating = False
On Error Resume Next
Me.Shapes("La_Foto").Delete
De_donde = "C:\Inventario2007\" & [c2] & ".jpg" 'Aquí va la ruta donde
están las imágenes
If Dir(De_donde) = "" Then Exit Sub
Set Foto = Me.Pictures.Insert(De_donde)
With Me.Range("f5:k24")
Arriba = .Top
Izquierda = .Left
Ancho = .Offset(0, .Columns.Count).Left - .Left
Alto = .Offset(.Rows.Count, 0).Top - .Top
End With
With Foto
.Name = "La_Foto"
.Top = Arriba
.Left = Izquierda
.Width = Ancho
.Height = Alto
End With
Set Foto = Nothing
End Sub

el asunto es el siguiente en la celda [c2] tengo la formula =
Indirecto(direccion($a$2,1))

Pero cuando me desplazo para abajo , arriba o a un lado la formula de la
macro se congela no cambia de imagen a que se deberá, pero cuando le quito
la formula ha la celda [c2] y la pongo manual el nombre de la imagen, esta
si cambia la imagen alguien me podría ayudar por favor

Muchas gracias

Un saludo
Daniel
 

Leer las respuestas

#1 Héctor Miguel
14/09/2007 - 01:02 | Informe spam
hola, Daniel !

... este codigo y funcio a la perfección para lo que fue hecho, nada mas que ahora lo quiero ocupar con una variante [...]
el asunto es el siguiente en la celda [c2] tengo la formula = Indirecto(direccion($a$2,1))
Pero cuando me desplazo para abajo , arriba o a un lado la formula de la macro se congela no cambia de imagen
... pero cuando le quito la formula ha la celda [c2] y la pongo manual el nombre de la imagen esta si cambia la imagen ...



1) toma en cuenta que el evento '_change' es disparado cuando se modifica/cambia/entra/edita/... la celda *Target*
NO cuando su resultado se actualiza por efectos de re/calculos o formulas cuyos cambios ocurren en otras celdas

2) [aparentemente] ahora los cambios estan ocurriendo en la celda $A$2 [NO en "$C$2" como condiciona el codigo] -?-
aunque tampoco comentas si la celda $A$2 cambia *por accion directa*... o por actualizacion por formulas -???-

3) si no puedes identificar clara y exactamente CUAL es la celda donde ocurre el cambio [Worksheet_Change]
[probablemente] seria mas conveniente usar el evento '_calculate' [aunque resultaria mas desgstante] :-((

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

__ el codigo expuesto __
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Address = "$C$2" Then Exit Sub
Dim De_donde As String, Foto As Object, _
Arriba As Double, Izquierda As Double, Ancho As Double, Alto As Double
Application.ScreenUpdating = False
On Error Resume Next
Me.Shapes("La_Foto").Delete
De_donde = "C:\Inventario2007\" & [c2] & ".jpg" 'Aqui va la ruta donde estan las imagenes
If Dir(De_donde) = "" Then Exit Sub
Set Foto = Me.Pictures.Insert(De_donde)
With Me.Range("f5:k24")
Arriba = .Top
Izquierda = .Left
Ancho = .Offset(0, .Columns.Count).Left - .Left
Alto = .Offset(.Rows.Count, 0).Top - .Top
End With
With Foto
.Name = "La_Foto"
.Top = Arriba
.Left = Izquierda
.Width = Ancho
.Height = Alto
End With
Set Foto = Nothing
End Sub

Preguntas similares