Dos condiciones para dos rangos en el evento Change.

02/10/2006 - 19:06 por ~ jose ~ | Informe spam
Hola, que tal?

Tengo una pregunta que haceros,
Tengo un código en el módulo de una hoja, que cuando hay cambios en
cualquier celda de este rango [A1:K65536] se ejecuta un código y lo
que pregunto es como puedo hacer para que si también hubiera cambios
en el rango [M1:P65536] se ejecute otro código, bueno en este caso
seria una 'Call'.
Expongo el código que tengo:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [A1:K65536]) Is Nothing Then Exit Sub

With Application
.ScreenUpdating = False
.EnableEvents = False


With Sheets("Piezas")
.[A1].CurrentRegion.EntireRow.Delete
[D:D].AdvancedFilter _
Action:=xlFilterCopy, _
CopyToRange:=.[A1], _
Unique:=True
.[A1].CurrentRegion.Sort Key1:=.[A1], Header:=xlGuess
End With

With Sheets("Piezas_pequenas")
.[A1].CurrentRegion.EntireRow.Delete
[D:D].AdvancedFilter _
Action:=xlFilterCopy, _
CopyToRange:=.[A1], _
Unique:=True
.[A1].CurrentRegion.Sort Key1:=.[A1], Header:=xlGuess
End With

.ScreenUpdating = True
.EnableEvents = True

End With
End Sub

Gracias,
jose

Preguntas similare

Leer las respuestas

#1 David
02/10/2006 - 19:35 | Informe spam
Hola, Jose.

En lo personal, prefiero no utilizar instrucciones como EXIT SUB, EXIT FOR,
etc., pues rompen la estructura de tus procedimientos y cuando quieres
depurar tu código son un verdadero dolor de cabeza. En su lugar, ver el caso
contrario de una condición podría ser una opción interesante. Considera
modificar tu código para que sea algo como esto:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Intersect(Target, [A1:K65536]) Is Nothing) Then
' ... Proceso a ejecutar cuando se modifique este rango.
ElseIf Not (Intersect(Target, [M1:P65536]) Is Nothing) Then
' ... Proceso a ejecutar cuando se modifique este otro rango.
End If
End Sub


Pruébalo, y si encuentras problemas, comentas...

saludos.



"~ jose ~" escribió:

Hola, que tal?

Tengo una pregunta que haceros,
Tengo un código en el módulo de una hoja, que cuando hay cambios en
cualquier celda de este rango [A1:K65536] se ejecuta un código y lo
que pregunto es como puedo hacer para que si también hubiera cambios
en el rango [M1:P65536] se ejecute otro código, bueno en este caso
seria una 'Call'.
Expongo el código que tengo:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [A1:K65536]) Is Nothing Then Exit Sub

With Application
.ScreenUpdating = False
.EnableEvents = False


With Sheets("Piezas")
.[A1].CurrentRegion.EntireRow.Delete
[D:D].AdvancedFilter _
Action:=xlFilterCopy, _
CopyToRange:=.[A1], _
Unique:=True
.[A1].CurrentRegion.Sort Key1:=.[A1], Header:=xlGuess
End With

With Sheets("Piezas_pequenas")
.[A1].CurrentRegion.EntireRow.Delete
[D:D].AdvancedFilter _
Action:=xlFilterCopy, _
CopyToRange:=.[A1], _
Unique:=True
.[A1].CurrentRegion.Sort Key1:=.[A1], Header:=xlGuess
End With

.ScreenUpdating = True
.EnableEvents = True

End With
End Sub

Gracias,
jose


Respuesta Responder a este mensaje
#2 ~ jose ~
05/10/2006 - 00:29 | Informe spam
Hola, me parece fantástico, de hecho lo voy a utilizar mas de lo que
pensaba, y también voy a probar a poner mas de dos condiciones por
hoja, bueno a decir verdad estoy pensando en poner en una hoja 20
condiciones.

Gracias, hasta luego.
jose

David wrote:
Hola, Jose.

En lo personal, prefiero no utilizar instrucciones como EXIT SUB, EXIT FOR,
etc., pues rompen la estructura de tus procedimientos y cuando quieres
depurar tu código son un verdadero dolor de cabeza. En su lugar, ver el caso
contrario de una condición podría ser una opción interesante. Considera
modificar tu código para que sea algo como esto:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Intersect(Target, [A1:K65536]) Is Nothing) Then
' ... Proceso a ejecutar cuando se modifique este rango.
ElseIf Not (Intersect(Target, [M1:P65536]) Is Nothing) Then
' ... Proceso a ejecutar cuando se modifique este otro rango.
End If
End Sub


Pruébalo, y si encuentras problemas, comentas...

saludos.



"~ jose ~" escribió:

> Hola, que tal?
>
> Tengo una pregunta que haceros,
> Tengo un código en el módulo de una hoja, que cuando hay cambios en
> cualquier celda de este rango [A1:K65536] se ejecuta un código y lo
> que pregunto es como puedo hacer para que si también hubiera cambios
> en el rango [M1:P65536] se ejecute otro código, bueno en este caso
> seria una 'Call'.
> Expongo el código que tengo:
>
> Private Sub Worksheet_Change(ByVal Target As Range)
> If Intersect(Target, [A1:K65536]) Is Nothing Then Exit Sub
>
> With Application
> .ScreenUpdating = False
> .EnableEvents = False
>
>
> With Sheets("Piezas")
> .[A1].CurrentRegion.EntireRow.Delete
> [D:D].AdvancedFilter _
> Action:=xlFilterCopy, _
> CopyToRange:=.[A1], _
> Unique:=True
> .[A1].CurrentRegion.Sort Key1:=.[A1], Header:=xlGuess
> End With
>
> With Sheets("Piezas_pequenas")
> .[A1].CurrentRegion.EntireRow.Delete
> [D:D].AdvancedFilter _
> Action:=xlFilterCopy, _
> CopyToRange:=.[A1], _
> Unique:=True
> .[A1].CurrentRegion.Sort Key1:=.[A1], Header:=xlGuess
> End With
>
> .ScreenUpdating = True
> .EnableEvents = True
>
> End With
> End Sub
>
> Gracias,
> jose
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida