martes, 17 de octubre de 2017

VBA: El Scroll en las macros de Excel

En muchas ocasiones, seguro nos ha pasado a todos, al emplear el asistente de grabación de macros y hacer uso de la rueda del ratón se ha activado el Scroll y nos deja grabado en nuestro procedimiento una línea similar a esta....
ActiveWindow.SmallScroll Down:=45

Lo que significa este instrucción y otras posibilidades de este método es de lo que vamos a hablar hoy.


Veamos algunos usos en una macro añadida dentro de un módulo estándar de nuestro proyecto de VB:

Sub El_Scroll_en_VBA_Excel()
'activamos la hoja 1 de nuestro libro de trabajo
ThisWorkbook.Sheets(1).Activate

''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Opciones para situarse concretamente en la ventana activa
'Hacemos Scroll vertical y horizontal hasta la fila 1 y columna 1
ActiveWindow.ScrollRow = 1      'indicamos el número de la fila destino
ActiveWindow.ScrollColumn = 1   'indicamos el número de la columna destino
MsgBox ActiveWindow.VisibleRange.Cells(1, 1).Address

'Hacemos Scroll vertical y horizontal hasta la fila 2 y columna 2
ActiveWindow.ScrollRow = 2
ActiveWindow.ScrollColumn = 2
MsgBox ActiveWindow.VisibleRange.Cells(1, 1).Address

'... o hacia la celda E13
'(que se quedará en la parte superior izquierda de la ventana activa)
ActiveWindow.ScrollRow = 13
ActiveWindow.ScrollColumn = 5
MsgBox ActiveWindow.VisibleRange.Cells(1, 1).Address
''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Opciones para desplazarse desde donde estemos
'Scroll hacia abajo de tres filas (desde donde estemos)
ActiveWindow.SmallScroll Down:=3
MsgBox ActiveWindow.VisibleRange.Cells(1, 1).Address

'Scroll de tres columnas hacia la izquierda.
ActiveWindow.SmallScroll ToLeft:=2
MsgBox ActiveWindow.VisibleRange.Cells(1, 1).Address
''''''''''''''''''''''''''''''''''''''''''''''''''''''
'También podemos emplear el Scroll dentro de los distintos paneles
Range("D8").Select  'seleccionamos la celda D8
'aplicamos la división de la ventana en varios 'paneles'
'No confundir Dividir con Inmovilizar paneles!!
ActiveWindow.Split = True
'nos desplazamos con el Scroll hacia la fila 10 y columna 10 (col J) del cuarto Panel
'Paneles numerado de izquierda a derecha y de arriba abajo
'1--2
'3--4
ActiveWindow.Panes(4).ScrollRow = 10
ActiveWindow.Panes(4).ScrollColumn = 10
MsgBox ActiveWindow.Panes(4).VisibleRange.Cells(1, 1).Address

'Eliminamos la división
ActiveWindow.Split = False
End Sub



Como hemos comprobado tenemos algunas propiedades interesantes:
1-ScrollRow y ScrollColumn que desplazan el scroll, en su parte superior izquierda a la fila y/o columna que indiquemos.
2-SmallScroll con sus opciones: Down, Up, ToLeft y ToRight. Que nos desplazan desde nuestra posición actual hacia la dirección indicada.

Por otra parte, se incluye al final de nuestra macro ejemplo, el uso del objeto Pane que nos permitirá controlar el Scroll dentro de los diferentes paneles existentes en nuestra hoja.
Hemos dividido la ventana empleado la propiedad .Split.


Para cerciorarse del correcto movimiento del Scroll entre las celdas de la hoja, he incorporado un MsgBox que muestre la dirección de la celda superior izquierda de lo que estamos viendo... para lo cual usamos otra propiedad:
.VisibleRange
para trabajar sobre lo que estamos viendo en cada momento.

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.