Vectorización de una matriz
- alumnos <- c(24,22,20,19,21,25)
- mataprob <- c(67,72,84,53,82,79)
For i = 0 To 2:sVar = mDatos(i)Posicionamiento(sVar,"mcd",i)Next
mDatos(0) = NIE(CodAl)
mDatos(0) = InputBox("NIE:","ALUMNADO", mDatos(0))
CodAl = InputBox("Introduce el código de identificación del alumno: " & Chr(13) &_"1. Roberto Marcial Pérez" & Chr(13) &_"2. María Martínez Sanz" & Chr(13) &_"3. Adela Decastro Morán" & Chr(13) &_"4. Antonio Heernández Jiménez" & Chr(13) &_"5. Matias Luján López" & Chr(13) &_"6. Amalia Desantos Melquiades" & Chr(13), "ALUMNADO","1-2-3-4-5-6")
For i = LBound(mNIE()) To UBound(mNIE()):mNIE(i)If i = Id ThenAlNIE = mNIE(i)End IfNext
Sub DictamenMod2
Dim oMarcador As Object
Dim sAjustesOrganizativosA As String, sAjustesOrganizativosB As String
sAjustesOrganizativosA = InputBox("¿Son necesarios ajustes organizativos y metodológicos?","DICTAMEN. 5. Adapciones que precisa","Sí-No")
If sAjustesOrganizativosA= "Sí" Then
sAjustesOrganizativosB = InputBox("Describe las medidas organizativas, metodolóogicas y curriculares de acceso que consideras necesario.","DICTAMEN. 5. Adaptaciones que precisa")
ElseIf sAjustesOrganizativosA= "Sí" Then
sAjustesOrganizativosB = ""
Else
MsgBox("No has dado respuesta a lo demandado en el campo Ajustes organizativos del aparado 5 del DICTAMEN o la respuesta no se acepta como válida")
End If
oMarcador = ThisComponent.getBookmarks().getByName("mcr0")
oMarcador.getAnchor.setString(sAjustesOrganizativosA)
oMarcador = ThisComponent.getBookmarks().getByName("mcr1")
oMarcador.getAnchor.setString(sAjustesOrganizativosB)
End Sub
Dim oMarcador As Object
Dim sAjustesOrganizativosA As String, sAjustesOrganizativosB As String
sAjustesOrganizativosA = InputBox("¿Son necesarios ajustes organizativos y metodológicos?","DICTAMEN. 5. Adapciones que precisa","Sí-No")
... pero esto genera un posible error por omisión (respuesta vacía) o por separarse (en forma o en contenido) de las dos únicas opciones válidas (Sí/No). Para controlar estos posibles errores se pueden usar diferentes opciones y aunque estos errores sean excepcionales, su solución no es simple (2).
Otra posible formulación pasa por emplear la función MsgBox(), lo que nos obliga, a su vez una nueva variable Integer (Dim iR as Integer) a asociar a la función MsgBox(). Esta opción evita posibles errores por parte del usuario, aunque obliga también a modificar la estructura condicional, condicionando un script alternativo:
Dim oMarcador As Object
Dim sAjustesOrganizativosA As String, sAjustesOrganizativosB As String
Dim iR As Integer
iR = MsgBox ("¿Son necesarios ajustes organizativos y metodológicos?",4,"DICTAMEN. 5. Adaptaciones que precisa")
If iR = 6 Then
sAjustesOrganizativosA = "Sí"
sAjustesOrganizativosB = InputBox("Describe las medidas organizativas, metodolóogicas y curriculares de acceso que consideras necesario.","DICTAMEN. 5. Adapciones que precisa")
Else
sAjustesOrganizativosA = "No"
sAjustesOrganizativosB = ""
End If
Como podemos comprobar, esta segunda opción simplifica el script y lo hace más resisten a errores de uso (en realidad los reduce a cero), por lo que es preferible al primer script (3).
oMarcador = ThisComponent.getBookmarks().getByName("mcr0")
oMarcador.getAnchor.setString(sAjustesOrganizativosA)
oMarcador = ThisComponent.getBookmarks().getByName("mcr1")
oMarcador.getAnchor.setString(sAjustesOrganizativosB)
Uno de los tipos específicos de texto que tenemos que crear con cierta frecuencia son los listados, bien como documentos en si mismos, bien como elementos de un documento más amplio. Para hacerlo mediante teclado (que suele ser lo común) existen tres opciones básicas: crear la lista desde cero, copiar y pegar los ítem recurriendo a un documento externo que contiene la lista maestra o utilizar esa lista maestra como plantilla y, al contrario que en los casos anteriores, eliminar los ítem que no interesen. Aunque la tercera fórmula es el modo de trabajo que más se acerca al objetivo de la automatización, todas ellas, en realidad, están muy lejos que acercarse a este objetivo. Usar macros y script (OOo Basic) es la única forma en que realmente se facilitar la tarea.
En cualquier caso, y para lo que ahora nos importa, disponer de procedimientos de generación informatizada de listados nos va a ayudar a simplificar el trabajo, aunque requiera uno previo.
No me voy a detener demasiado en el aspecto formal de la creación de un listado, que podemos resolver mediante el uso de tablas o mediante la activación de las marcas del ítem de lista (vg. un número índice o una bolita) por medio de una macro. Pero tampoco quiere dejar de explicar cómo hacerlo, así que dedicaremos el inicio de esta entrada a explicar esta forma de trabajo mediante macros simples y script.
Como sabemos, las listas son de dos tipos genéricos: alfanuméricas y gráficas. Las dos macros simples que las generan son las siguientes:
Alfanumérica:
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "On"
args1(0).Value = true
dispatcher.executeDispatch(document, ".uno:DefaultNumbering", "", 0, args1())
Gráfica (en este caso de bolita)
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "On"
args1(0).Value = Valor
dispatcher.executeDispatch(document, ".uno:DefaultBullet", "", 0, args1())
Ambas trabajan con argumentos booleanos (arg().Value), así que la conversión de estas macros simples en subrutinas para ser empleadas desde un script, supone implementar un argumento (variable) de tipo Boolean: sub ListaSimple (Valor As Boolean) que deberemos incluir en la llamada a la subrutina como en este ejemplo: ListaSimple(True). Cuando queramos finalizar el listado, deberemos llamar de nuevo a la subrutina y cambiar el argumento a False.
Además de este código, también necesitamos el código (macro o script) de escritura y el salto de línea al finalizar el ítem...
dispatcher.executeDispatch(document, ".uno:InsertPara", "", 0, Array())
Podemos anidar listas (e ítem) mediante el uso de tabulador, generando un incremento del sangrado que facilita la estructuración de la lista en ítem principal e ítem secundario. Para ellos haremos uso de la misma macro-subrutina de escritura, pasando como argumento el carácter especial Chr$(9). A continuación te muestro el script que nos permite generar una lista (los inicios de la misma) que contiene otra anidada. Hacerla más amplia y funcional es cosa de escribir más líneas de código:
Sub CrearLista
VarSis
ListaSimple(True)
Escribir("Listado de alumnos con NEE")
SaltarLinea
ListaSimple(False)
Escribir(Chr$(9))
ListaSimpleNum(True)
Escribir("Jaime Ortega López")
End Sub
... y este es el resultado. Simple por haberme ahorrado esfuerzos, pero suficiente para explicar lo que me interesa.
Sub Semana
VarSisDim DiasSemana(6) As StringDim i As Integer
DiasSemana(0) = "Lunes"DiasSemana(1) = "Martes"DiasSemana(2) = "Miércoles"DiasSemana(3) = "Jueves"DiasSemana(4) = "Viernes"DiasSemana(5) = "Sábado"DiasSemana(6) = "Domingo"
ListaSimple(True)Escribir("Días de la semana")SaltarLineaListaSimple(False)Escribir(Chr$(9))ListaSimpleNum(True)
For i = LBound(DiasSemana()) To UBound(DiasSemana())Escribir(DiasSemana(i))If i < UBound(DiasSemana()) ThenSaltarLineaEnd IfNext
End Sub
Como puedes observar, este script se divide en cuatro partes:
Muestro a continuación el resultado. No parece gran cosa, pero que supone la escritura automática de una lista:
Nos falta dar un paso más que básicamente consiste en dar la posibilidad de automatizar la escritura de una lista resultante de la selección de ítem de otra lista. Viene a ser el equivalente a trabajar sobre un documento-base que contiene a lista completa de la que vamos borrando los elementos que no nos interesan. De este modo conseguimos generar listas personalizadas, con todos los posibles usos prácticos que podemos intuir (4)
Este es el script. Por simplicidad sustituyo la escritura en el documento por el mero visionado de los elementos de la lista mediante MsgBox, pero el principio de funcionamiento del script no supone una variación sustancial. Esta simplificación permite que nos centremos en lo fundamental del funcionamiento del script.
Sub MatrizSemana
Dim DiasSemana(6) As String
Dim MisDias () As String
Dim Dia As Integer
Dim i As Integer, b As Integer
DiasSemana(0) = "Lunes"
DiasSemana(1) = "Martes"
DiasSemana(2) = "Miércoles"
DiasSemana(3) = "Jueves"
DiasSemana(4) = "Viernes"
DiasSemana(5) = "Sabado"
DiasSemana(6) = "Domingo"
b = 0
For i = LBound(DiasSemana()) To UBound(DiasSemana())
Dia = MsgBox (DiasSemana(i),4,"MIS DIAS")
If Dia = 6 Then
ReDim Preserve MisDias(b)
MisDias(b) = DiasSemana(i)
b=b+1
End If
Next
MsgBox "Número de días seleccionados: " & CStr(UBound(MisDias()) + 1)
For i = LBound(MisDias()) To UBound(MisDias())
MsgBox MisDias(i)
Next
End Sub
Dia = MsgBox (DiasSemana(i),4,"MIS DIAS")
NOTAS.