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