Mostar y ocultar hojas mediante OOo Basic
Sub OcultarHoja1 'Hoja activa
Dim oHojaActiva As ObjectoHojaActiva = ThisComponent.getCurrentController.getActiveSheet()oHojaActiva.isVisible = False
End Sub
Una vez que asignamos el objeto HojaActiva a la variable objeto declarada a tal fin (oHojaActiva = ThisComponent.getCurrentController.getActiveSheet()), simplemente tendremos que declarar su atributo isVisble como False (oHojaActiva.isVisible = False)
Esta última acción es la define lo nuclear del código OOo Basic que nos permite definir una hoja como visible u oculta. Podemos crear código que parta de otras consideraciones respecto a la hoja de referencia, pero lo fundamental está ya expresado en el script anterior.
Por ejemplo, Ocultar/Mostar una determinada hoja identificada por su índice:
Sub OcultarHoja2 'Ocultar hoja
Dim oHoja As Object
oHoja = ThisComponent.getSheets.getByIndex(1)
oHoja.isVisible = False
End Sub
Sub MostrarHoja2 'Mostar hoja
Dim oHoja As Object
oHoja = ThisComponent.getSheets.getByIndex(1)
oHoja.isVisible = True
End Sub
En ambos casos se asigna a la variable el objeto Hoja 1 (1) (oHoja = ThisComponent.getSheets.getByIndex(1)) y después se atribuye valor True/False a su atributo isVisible.
Es posible, pues, crear una subrutina que asuma la ejecución de la operación (mostrar vs. ocultar) con tan sólo pasarle como valor del parámetro True/False, además del identificador de la hoja sobre la que actuar. Te muestro el código de este conjunto:
Sub MostrarH ' Script para mostrar una hoja
operaMO (True,0)
End Sub
Sub OcultarH ' Script para ocultar una hoja
operaMO (False,0)
End Sub
Sub operaMO (vb As Boolean, nh As Integer) 'Subrutina
Dim oHoja As Object
oHoja = ThisComponent.getSheets.getByIndex(nh)
oHoja.isVisible = vb
End Sub
No es ahora necesario complicar los script, así que me limito a formularlos de la forma más simple. La subrutina es prácticamente idéntica al script mostrado anteriormente, sustituyendo los valores por los identificadores de los parámetros que, como se puede ver, son dos (operaMO (vb As Boolean, nh As Integer))
Para finalizar esta entrada me ha parecido de interés explicar cómo mostrar u ocultar todas las hojas del libro de una sala vez (2).
El script es muy simple, ya que me limito a hacer la llamada a la subrutina. Además el parámetro que se pasa debe ajustarse al objetivo cambiando su valor (True vs. False):
Sub TodasOM 'Script
TodasH(True)
End Sub
Sub TodasH (vb As Boolean) 'Subrutina
Dim oHojaActiva As Object
Dim oHojas As Object
Dim co1 As Long
oHojaActiva = ThisComponent.getCurrentController.getActiveSheet()
oHojas = ThisComponent.getSheets()
For co1 = 0 To oHojas.getCount() - 1
If oHojas.getByIndex(co1).getName <> oHojaActiva.getName() Then
oHojas.getByIndex(co1).isVisible = vb
End If
Next
End Sub
La subrutina tiene un único parámetro (TodasH (vb As Boolean)) puesto que no es necesario especificar las hojas sobre las que se actuará, lo que sí es necesario es diferenciar los objetos Hojas (oHojas) y HojaActiva (oHojaActiva), de ahí que se declaren dos variables.
Después asignamos los objetos a las variables...
oHojaActiva = ThisComponent.getCurrentController.getActiveSheet()
oHojas = ThisComponent.getSheets()
... para recorrer después el conjunto de las hojas mediante un bucle For, (3) actuando sobre ellas (4). El condicional anidado If permite diferenciar la hoja activa del resto (5), ya que sobre ésta no deseamos que se realice la operación Mostrar/Ocultar (6).