1 - EVENTO: BEFOREDOUBLECLICK
Si bien algo ya se comentó en la planilla de Turnos (en VIDEOS 43 y 44) acerca del uso de un evento de hoja vamos a desarrollar a lo largo de un par de entradas los principales Eventos de Hoja y de Libro.
En esta entrada veremos algunos ejemplos del evento: BeforeDoubleClick
NOTA: El evento BeforeRightClick cumple la misma función y se programa del mismo modo. Pero como el clic derecho se utiliza en la hoja para otras funciones es más recomendable el 'doble clic'.
IMPORTANTE: Las macros de los Eventos de Hojas se colocan en cada objeto HOJA donde se vaya a trabajar.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)'control de ubicaciónIf Target.Column <> 1 Then Exit SubIf Target.MergeCells = False Then Exit Sub'control de filas aún disponiblesX = Target.Row - 1If Range("D" & X) = "" And Range("E" & X) = "" ThenMsgBox "Debes completar las filas vacías antes de habilitar nuevas.", , "Atención"Range("D" & X).SelectExit SubEnd If'se habilitan nuevas filasCall nuevo_Ingreso(X)'MsgBox "Se agrega fila " & X + 1Target.Offset(0, 1).SelectEnd Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error Resume Next
'se evalúa que la celda tenga un valor para filtrar
If Target.Value <> "" Then
'se evalúa si Target se encuentra entre las primeras 5 columnas
If Target.Column <= 5 Then
'se resta 1 columna porque la tabla se inicia en B
colx = Target.Column - 1
'se filtra por el valor del Target
ActiveSheet.ListObjects("Analisis34").Range.AutoFilter Field:=colx, Criteria1:=Target.Value
Else
' se trata de filtrar un rango que se inicia en col H (col 8)
colx = Target.Column - 7
'se establece el fin de rango
fini = Range("H" & Rows.Count).End(xlUp).Row
'se filtra el rango por el valor del Target
ActiveSheet.Range("$H$4:$K$" & fini).AutoFilter Field:=colx, Criteria1:=Target.Value
End If
End If
End Sub
NOTA: en casos como éste conviene entonces colocar la macro solamente en el objeto LIBRO (ThisWorkBook) y quitarlas de las hojas.
Aquí hay que tener el cuidado de no nombrar las hojas por su nombre sino por su valor de índice.
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
If ActiveSheet.Name <> "CAJA-1" Then
On Error Resume Next
If Target.Value <> "" Then
If Target.Column <= 5 Then
colx = Target.Column - 1
ActiveSheet.ListObjects(1).Range.AutoFilter Field:=colx, Criteria1:=Target.Value
Else
colx = Target.Column - 7
fini = Range("H" & Rows.Count).End(xlUp).Row
ActiveSheet.Range("$H$4:$K$" & fini).AutoFilter Field:=colx, Criteria1:=Target.Value
End If
End If
End If
No hay comentarios.:
Publicar un comentario