Por que no ejecuta un evento?

He creado un evento, donde se modifica una imagen en base al valor de una celda, funciona bien siempre y cuando cambie el valor una vez por vez, pero en este caso también hice un botón para impresión masiva, al ejecutar esta macro el evento que modifica la imagen no funciona.

Dejo los códigos:

En la hoja "proyecto"

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 On Error Resume Next
 If Range("I3") > 0 Then
    empresa = Range("I3")
    ActiveSheet.Image1.Picture = LoadPicture("carpeta que contiene las imagenes" & empresa & ".jpg")
    ActiveSheet.Image2.Picture = LoadPicture("carpeta que contiene las imagenes" & empresa & ".jpg")
End If
End Sub

El modulo para el botón:

Sub PruebaImpresion2()
If Sheets("Datos para impresion").Range("A2") <> "" Then
Do Until Sheets("Datos para impresion").Range("A2") = ""
Range("F2").Select
Sheets("Datos para impresion").Range("A2").Copy Destination:=Sheets("Proyecto").Range("F2")
Sheets("Datos para impresion").Range("C2").Copy Destination:=Sheets("Proyecto").Range("F3")
Sheets("Datos para impresion").Range("D2").Copy Destination:=Sheets("Proyecto").Range("F4")
Sheets("Datos para impresion").Range("E2").Copy Destination:=Sheets("Proyecto").Range("F5")
ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Sheets("Datos para impresion").Rows("2:2").Delete Shift:=xlUp
Sheets("Proyecto").Range("F2") = ""
Sheets("Proyecto").Range("F3") = ""
Sheets("Proyecto").Range("F4") = ""
Sheets("Proyecto").Range("F5") = ""
Sheets("Proyecto").Select
Range("F2").Select
Loop
Else
MsgBox "No hay nada para imprimir"
End If
End Sub

1 Respuesta

Respuesta
1

.10/08/16

Buenas, Horacio

Acabo de ver tu consulta y me parece es que no está evaluando el cambio que haces en la celda.

Podrías intentar con esto:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' On Error Resume Next <<< No es necesario, porque -además-no tiene consecuencia
Set isect = Application.Intersect(Range("I3"), Target)
If Not isect Is Nothing Then
If Range("I3").value > 0 Then
empresa = Range("I3")
ActiveSheet.Image1.Picture = LoadPicture("carpeta que contiene las imagenes" & empresa & ".jpg")
ActiveSheet.Image2.Picture = LoadPicture("carpeta que contiene las imagenes" & empresa & ".jpg")
End If
End If
Set isect = Nothing
End Sub

Igual, me preguntaba si no sería mejor que usaras el evento "Worksheet_Change" que se dispara cuando la celda que le indiques cambie.

En tal caso, el código que te pasé es el mismo, solo tenés que reemplazar la primera línea por esta:

Private Sub Worksheet_Change(ByVal Target As Range)

Intentalo y contame.

Un abrazo

Fernando

(Buenos Aires, Argentina)

Hola Fernando, antes que nada muchas gracias por tu tiempo!, te comento que he probado con lo que recomendas, pero haciendo esas modificaciones directamente el activesheet deja de funcionar, de la manera que esta por lo menos cambia la imagen realizando impresiones individuales, el inconveniente esta cuando ejecuto la impresión masiva.

Tal vez haya algo que no estoy teniendo en cuenta??

.

Buenos días, Horacio

Es que los cambios que ocurran en una hoja por intervención de una rutina de VBA no son capturados como esos eventos.

De todos modos, al utilizar un botón para ejecutar la impresión masiva, podés aprovechar para incluir las mismas instrucciones que tenés en el evento para que se ejecuten como si ocurriera el evento.

Espero haberme dado a entender.

Abrazo

Fernando

.

Lo que queres decir es que, dentro del código de la macro incluida en el botón de control, podría incluir la instrucción para que se modifique el logo??, eso seria una gran solucion!, pero cuando lo intente no logre hacerlo, se que seguro es un error mio, porque soy nuevo en el mundo vba, por lo que si me podes dar una mano te lo voy a agradecer!

Hola, 

Lo que queres decir es que, dentro del código de la macro del botón, puedo incluir el código para el cambio de logo?, trate de hacerlo pero no pude, se que el error es mio porque aun soy nuevo en el mundo vba, si me podes dar una mano con eso, seria genial!!

Gracias!

.

Buenas, capo

Si tu macro de impresión es la que pasaste en la pregunta y lo que pretendés que hagas es lo que estaba en el primer código que pegaste, la combinación de ambos debería ser algo como esto:

Sub PruebaImpresion2()
If Sheets("Datos para impresion").Range("A2") <> "" Then
Do Until Sheets("Datos para impresion").Range("A2") = ""
Range("F2").Select
Sheets("Datos para impresion").Range("A2").Copy Destination:=Sheets("Proyecto").Range("F2")
Sheets("Datos para impresion").Range("C2").Copy Destination:=Sheets("Proyecto").Range("F3")
Sheets("Datos para impresion").Range("D2").Copy Destination:=Sheets("Proyecto").Range("F4")
Sheets("Datos para impresion").Range("E2").Copy Destination:=Sheets("Proyecto").Range("F5")
'**** inserté aquí el código, previo a la instruccción de impresión
If Range("I3") > 0 Then
    empresa = Range("I3")
    ActiveSheet.Image1.Picture = LoadPicture("carpeta que contiene las imagenes" & empresa & ".jpg")
    ActiveSheet.Image2.Picture = LoadPicture("carpeta que contiene las imagenes" & empresa & ".jpg")
End If
'****
ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Sheets("Datos para impresion").Rows("2:2").Delete Shift:=xlUp
Sheets("Proyecto").Range("F2") = ""
Sheets("Proyecto").Range("F3") = ""
Sheets("Proyecto").Range("F4") = ""
Sheets("Proyecto").Range("F5") = ""
Sheets("Proyecto").Select
Range("F2").Select
Loop
Else
MsgBox "No hay nada para imprimir"
End If
End Sub

Desde luego, adaptá esas líneas insertadas a lo que querés que ocurra.

Abrazo

Fernando

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas