Uso de la BDNombres (II)
Sub AccesoBDNombresDesdeDocapDim viNombre As String, vGenero As String'Simulo el acceso desde el script de la fase dos (DocAp)'en la que dispongo de la vi-nombre identificada aquí como viNombre'pero no dispongo del dato género asociado al nombre'La idea es:' 1º. solicitar el dato a la BDNombres mediante una función' 2º. de existir el nombre localizar y pasar el género gramatical asociadoviNombre = "Rosamunde"vGenero = BuscarNombre(viNombre)'En caso de cumplirse el criterio de existencia aquí finaliza el procesoIf vGenero = "" ThenMsgBox "No existe el nombre, luego no existe dato de género"ElseMsgBox ("Datos: " & Chr(13) &_"Nombre del alumno " & viNombre & Chr(13) &_"Género gramatical " & vGenero )End If'pero de no existir el nombre necesitamos desarrollar el suproceso siguiente:' 3º. Buscar la primera celda de la columna nombre (A) vacía' 4º. Escribir en ella el nombre (viNombre)' 5º. Pedir mediante InputBox() el dato género gramatical asociado' 6º. Escribirlo en la misma posición en la columna Género (B)End Sub
Dado que se trata de un script de trabajo y que está ampliamente comentado, no necesario más aplicación, así que paso a mostrar el código de la función.
Function BuscarNombre(NombreNuevo As String) As String
'Variables
Dim sRuta As String
Dim mArg()
Dim oDocumento As Object, oNombre As Object, oGenero As Object
Dim oHoja As Object
Dim i As Integer
Dim NombreCol As String, NombreGen As String
'Accedo a BDNombres y a la hoja que contiene el listado de nombres y género asociado
sRuta = ConvertToUrl("C:/Users/TuIdentificador/Escritorio/Textos/BDNombres.ods")
oDocumento = StarDesktop.loadComponentFromURL( sRuta, "_blank", 0, mArg() )
oHoja = oDocumento.getCurrentController.getActiveSheet()
'Recorro la columna de nombres buscando el nombre de referencia
For i = 1 To 1000
oNombre = oHoja.getCellRangeByName("A" & i)
NombreCol = oNombre.getString()
If NombreCol = NombreNuevo Then
oGenero = oHoja.getCellRangeByName("B" & i)
NombreGen = oGenero.getString()
Exit For
ElseIf NombreCol = "" Then
oNombre.setString(NombreNuevo)
NombreGen = InputBox("Género asociado al nombre " & NombreNuevo,"Género gramatical","m-f")
oGenero = oHoja.getCellRangeByName("B" & i)
oGenero.setString(NombreGen)
Exit For
End if
Next
'Guardo los cambios
oDocumento.store()
'Cierro el archivo
oDocumento.close(True)
'Paso el dato de género al identificador de la función
BuscarNombre = NombreGen
End Function
Después de acceder a los datos oHoja = oDocumento.getCurrentController.getActiveSheet() paso recorrer el listado de nombres (oNombre = oHoja.getCellRangeByName("A" & i)) mediante un bucle For (For i = 1 To 1000) asignando el contenido de las celdas a la variable NombreCol (NombreCol = oNombre.getString()). Esto nos permite trabajar con el contenido del listado para compararlo con el nombre del alumno a alumna a que la se realizar el informe. Para ello empleamos un condicional (If NombreCol = NombreNuevo Then) con dos opciones: que exista el nombre en el listado (primera parte del condicional, ya vista) o que no exista (ElseIf NombreCol = "" Then).
En el primer caso accedemos al dato Género (NombreGen = oGenero.getString()) y salimos del ciclo For (Exit For). En el segundo caso tenemos que:
- copiar el dato Nombre en la columna A (oNombre.setString(NombreNuevo))
- solicitar el dato Género al usuario (NombreGen = InputBox("Género asociado al nombre " & NombreNuevo,"Género gramatical","m-f"))
- y copiarlo en la posición de la columna B (oGenero.setString(NombreGen)) después de haber accedido a esa celda (oGenero = oHoja.getCellRangeByName("B" & i))
- Guardar los datos (oDocumento.store())
- Cerrar el documento (oDocumento.close(True))
- Y pasar el dato Género a la función para trasladarlo al script desde el que fue llamada (BuscarNombre = NombreGen)

No hay comentarios:
Publicar un comentario
Comenta esta entrada