Macro presentación aleatoria para OpenOffice Impress
¿Necesitas que tu presentación Impress se muestre cada vez que la ejecutas con un orden de diapositivas distinto?
¿Y que ese orden sea aleatorio?
Esta macro te da una sencilla y fácil solución.
Además, te indicamos como integrar la macro en tu OpenOffice y asignarla a un botón en la barra de herramientas Presentación.
Código de la macro
Sub Presentacion_Aleatoria
Dim i as Integer, x as Integer, nAleatorio as Integer
Dim oDocumento as Object, oPaginas as Object, nContador as Integer
Dim oPresentacionPersonalizada as Object, nContadorDiapos as Integer
Dim oTmp as Object, oDiapoAleatoria as Object, oPrimeraPagina as Object
Dim oControlActual as Object, oPresentacion as Object
oDocumento = ThisComponent
oPaginas = oDocumento.getDrawPages
nContador = oPaginas.Count
Dim aListaActual(nContador-1) as Integer
Dim aListaAleatoria(nContador-1) as Integer
Dim aListaTemp(nContador-1) as Integer
For i = 0 to nContador-1
aListaActual(i) = i
Next i
For x = nContador-1 to 0 Step -1
Redim aListaTemp(x)
nAleatorio = Int(Rnd*(x+1))
aListaAleatoria(nContador-1-x) = aListaActual(nAleatorio)
If x > 0 then
If nAleatorio > 0 then
For i = 0 to nAleatorio - 1
aListaTemp(i) = aListaActual(i)
Next i
End If
If nAleatorio < x then
For i = nAleatorio + 1 to x
aListaTemp(i-1) = aListaActual(i)
Next i
End If
Redim aListaActual(x-1)
aListaActual() = aListaTemp()
End If
Next x
oPresentacionPersonalizada = oDocumento.getCustomPresentations()
If oPresentacionPersonalizada.hasByname("MiPresentacion") Then
oTmp = oPresentacionPersonalizada.getByName("MiPresentacion")
nContadorDiapos = oTmp.Count
If nContadorDiapos > 0 then
For x = 0 to nContadorDiapos -1
oTmp.removeByIndex(0)
Next x
End If
Else
oTmp = oPresentacionPersonalizada.createInstance()
oPresentacionPersonalizada.insertByName("MiPresentacion", oTmp)
oTmp = oPresentacionPersonalizada.getByName("MiPresentacion")
End If
For x = 0 to nContador-1
oDiapoAleatoria = oPaginas.getByIndex(aListaAleatoria(x))
oTmp.insertByIndex(x, oDiapoAleatoria)
Next x
oPrimeraPagina = oPaginas.getByIndex(aListaAleatoria(0))
oControlActual = oDocumento.currentController
oControlActual.select(oPrimeraPagina)
oPresentacion = oDocumento.Presentation
oPresentacion.CustomShow = "MiPresentacion"
oPresentacion.Start()
End Sub
En el código de la macro se ha seguido la siguiente nomenclatura:
- Objetos: su nombre empieza por o (de Object)
- Contadores: su nombre empieza por n (de Numeric)
- Matrices: su nombre empieza por a (de Array)
Agregar una macro a OpenOffice
Para agregar esta macro a tu OpenOffice sigue los siguientes pasos:
- Selecciona y copia el código desde este artículo
- En OpenOffice selecciona desde el menú Herramientas > Macros > Organizar macros > OpenOffice.org Basic
- Selecciona Mis macros > Standard > Module1 y haz clic sobre el botón Editar
- Pega el código debajo de la declaración Sub Main / End Sub y cierra el editor de macros
Agregar una macro a una barra de herramientas en OpenOffice
Para agregar esta macro a tu barra de herramientas Presentación sigue los siguientes pasos:
- Desde el triángulo situado al final de la barra de herramientas Presentación selecciona Personalizar barra de herramientas...
- Haz clic sobre el último comando de la barra de herramientas (por defecto, Presentación)
- Haz clic sobre el botón Agregar...
- En la lista Categoría localiza y selecciona Macros de OpenOffice.org > Mis macros > Standard > Module1
- En la lista Comandos selecciona Presentación_Aleatoria y haz clic en Agregar y luego en Cerrar.
- Haz clic en el botón Modificar > Renombrar... y cambia el nombre a Aleatoria (o el que prefieras); haz clic sobre el botón Aceptar
- Haz clic sobre el botón Aceptar
Ya sólo queda que abras tu presentación y pruebes el nuevo botón.
Macro basada en un artículo del Foro Oficial de Apache OpenOffice en Español.