EVENTOS: SELECTIONCHANGE y CHANGE
2 - Evento SELECTIONCHANGE:
Este evento se ejecuta al seleccionar una celda o rango de celdas.
Como permanentemente seleccionamos celdas dentro de una hoja (al revisar contenido, o ingresar datos, etc) se deberá evaluar correctamente en qué celdas o rangos debe ser ejecutado este evento. Por eso este evento generalmente se utiliza al seleccionar celdas de títulos.
Ejemplo 1: pasar a la hoja del mes seleccionado.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'col donde se puede seleccionar para ejecutar macro
de avance
If Target.Column >= 7 And Target.Column <= 10
Then
'se controla si no es una celda numérica
If Not
IsNumeric(Target.Value) Then
'se controla posible error en el nombre de hoja
On
Error Resume Next
'se selecciona hoja cuyo nombre coincida con el texto del título. Previamente se la visibiliza
With
Sheets(Target.Text)
.Visible = True
.Select
End
With
End If
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As
Range)
'se ejecuta al seleccionar alguna celda en columnas 8
a 11 de la fila 4
If Target.Column >= 8 And Target.Column <= 11
And Target.Row = 4 Then
On Error
Resume Next
'si la
celda no está vacía se ordena la col de la celda seleccionada
If
Target.Value <> "" Then
Call
ordenaTabla(Target.Column)
End If
End If
End Sub
Y en un módulo se colocará la siguiente macro de ordenamiento. Como en la macro de llamada se asigna la columna que debe ser ordenada, aquí también debe colocarse ese argumento.
Sub ordenaTabla(nrocol)
'variables: última fila del rango, la col a filtrar y el
rango total de datos
finx = Cells(4, nrocol).CurrentRegion.Rows.Count + 2
rgoFilt = Range(Cells(4, nrocol), Cells(finx,
nrocol)).Address
rgoTot = Range("H4:K" & finx).Address
'ordenamiento
ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear
ActiveWorkbook.ActiveSheet.Sort.SortFields.Add2 Key:=Range(rgoFilt), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With
ActiveWorkbook.ActiveSheet.Sort
.SetRange
Range(rgoTot)
.Header =
xlYes
.MatchCase
= False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
3 - Evento: CHANGE
A diferencia del evento anterior donde se ejecuta un proceso al seleccionar una celda o rango, aquí con el evento Change se ejecutará al modificar la celda o rango.
Ejemplo 1: al modificar las celdas de la última columna de una tabla, se completan los campos de las 2 primeras columnas de ese registro. Al mismo tiempo también se ordena la tabla por columna de Concepto (col D)
Private Sub Worksheet_Change(ByVal Target As Range)
'se ejecuta en la tabla (col B:F)
If Target.Column = 6 And Target.Row > 2 Then
If
Target.Count = 1 Then
'se coloca la fecha del día en col B y el nro correlativo en col C
Range("B" & Target.Row) = Date
Range("C" & Target.Row) =
Application.WorksheetFunction.Max(Range("Analisis346[[#All],[ID]]"))
+ 1
'se ordena la tabla
Call
macroOrdena
'se posiciona en la fila siguiente, col D
Range("D" & Target.Row + 1).Select
End If
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
'se ejecuta en la tabla (col B:F)
If Target.Column = 6 And Target.Row > 2 Then
If
Target.Count = 1 Then
Range("B" & Target.Row) = Date
Range("C" & Target.Row) =
Application.WorksheetFunction.Max(Range("Analisis346[[#All],[ID]]"))
+ 1
'Call
macroOrdena
Range("D" & Target.Row + 1).Select
End If
Else
'se ejecuta en
el rango J:O
If
Target.Column = 9 And Target.Row > 2 Then
If
Target.Count = 1 Then
Range("O" & Target.Row).FormulaR1C1 =
"=IF(RC[-5]="""","""",MONTH(RC[-5]))"
End If
End If
End If
End Sub
No hay comentarios.:
Publicar un comentario