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
 

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


Preguntas similares