| Artículos | 01 DIC 2004

Cómo utilizar la automatización en MS Office (II)

Tags: Histórico
Rodolfo de Benito.
El mes pasado nos centramos en la automatización con Outlook para generar mensajes de correo, contactos, tareas y notas desde otras aplicaciones Office. En esta ocasión veremos cómo interactuar con Word desde otra aplicación para crear documentos, guardarlos, imprimirlos e incluso transferirles registros de Access. También veremos un truco para generar automáticamente una hoja de cálculo basada en una consulta de Access.

Cómo imprimir un documento de Word desde una aplicación Office
Supongamos que utilizamos una base de datos Access con información relativa a los pacientes de una clínica y que el historial médico de cada uno estuviera almacenado en un documento de Word. La pregunta es ¿cómo imprimir desde Access el historial de un paciente? Para resolverlo supondremos que la tabla de pacientes cuenta con el campo nHistorial y que el nombre del documento Word coincide con este número. Por ejemplo, el historial 334 correspondiente al paciente Carlos Gálvez Gálvez estará almacenado en el documento 334.doc. Para ello crearemos un botón en la vista de diseño del formulario de pacientes y le asociaremos un procedimiento VBA. Una vez creado el botón, seleccionamos Generar evento en el menú contextual y elegimos Generador de código. Esto dará paso al Editor de Visual Basic, que mostrará un procedimiento vacío similar a este:

Private Sub Comando1_Click()
End Sub

Tecleamos el código siguiente entre las dos líneas del procedimiento, pero antes debemos referenciar a la librería Microsoft Word Object Library (seleccionando en el menú Herramientas » Referencias y marcando la casilla correspondiente a esta librería):

Dim WordObj As Object
Set WordObj = CreateObject(“Word.Application”)
‘Suponemos que los historiales están en c:\Historial
WordObj.Documents.Open “C:\Historial\”& me!nHistorial
WordObj.PrintOut Background:=False
WordObj.Quit
Set WordObj = Nothing

Ahora cerramos el Editor pulsando la combinación de teclas ALT+Q y salimos de la vista diseño de su formulario para probar el funcionamiento del botón. Podemos observar que el procedimiento no comprueba la existencia del documento y dará error al intentar abrir uno que no exista. Podemos añadir las líneas de código para comprobarlo.

Cómo crear un documento de Word desde una aplicación Office
Complementando el truco anterior, quizá sería más cómodo disponer de otro botón en el formulario, por ejemplo Crear historial, para generar automáticamente un documento Word con el nombre del historial que corresponda. Para ello hay que insertar el botón de igual forma que en el caso anterior pero tecleando el código siguiente dentro del nuevo procedimiento. Debemos tener en cuenta que el procedimiento no comprueba que el documento ya exista.

Dim WordObj As Object
Set WordObj = CreateObject(“Word.Application”)
WordObj.Documents.Add
‘Aparecerá un encabezamiento y la fecha de creación del historial
WordObj.Selection.TypeText “Historial creado el “& date
WordObj.ActiveDocument.SaveAs Filename:=”c:\Historial\”& me!nHistorial
WordObj.Quit
Set WordObj = Nothing
MsgBox “Historial creado con éxito”

Si, por ejemplo, probamos el funcionamiento de este botón con el paciente de historial 334, entonces se generará un documento de Word con el nombre 334.DOC y se guardará en la carpeta Historial.

Cómo transferir un registro de una tabla Access a Word
Siguiendo con el ejemplo de la clínica, una mejora sobre el truco anterior consistiría en transferir al historial los datos personales del paciente, en lugar de crear el historial vacío. Por ejemplo, los campos Nombre, Dirección, Ciudad, Provincia, etc. Para lograrlo hay que modificar el procedimiento del truco anterior y sustituir la línea WordObj.Selection.TypeText “Historial creado el “& date por éstas:

With WordObj.Selection
.TypeText “Clínica PC World” & vbCr & vbCr
.TypeText “Historial creado el “ & Date & vbCr
.TypeText “Nombre:” & CStr(Me!Nombre) & vbCr
.TypeText “Dirección:” & CStr(Me!Dirección) & vbCr
.TypeText “Ciudad:” & CStr(Me!Ciudad) & vbCr
.TypeText “Provincia:” & CStr(Me!Provincia) & vbCr
.TypeText “Código postal:” & CStr(Me!CódPostal) & vbCr
.TypeText “Número de teléfono:” & CStr(Me!NúmTeléfono) & vbCr
End With

No resultaría difícil crear un procedimiento para ir añadiendo al historial las consultas del paciente. El sistema sería similar al anterior pero el botón estaría colocado en el formulario que maneja las consultas del paciente. En líneas generales, el procedimiento tendría que abrir el historial, situarse al final del documento y añadir la fecha de la consulta, motivo y diagnóstico. Algo similar a esto:

Private Sub AddConsulta_Click()
Dim WordObj As Object
Set WordObj = CreateObject(“Word.Application”)
‘Abrir el historial
WordObj.Documents.Open “C:\Historial\” & Me!nHistorial

‘Posicionarse al final del documento
WordObj.ActiveDocument.Bookmarks(“\Page”).Select
WordObj.Selection.MoveDown

‘Añadir los campos de la consulta
With WordObj.Selection
.TypeText vbCr & “Consulta del día “ & CStr(Me!Nombre) & vbCr
.TypeText “Motivo de la consulta: “ & CStr(Me!Nombre) & vbCr
.TypeText “Diagnóstico: “ & CStr(Me!Nombre) & vbCr
End With

Set WordObj = Nothing
MsgBox “Consulta añadida al historial”
End Sub

Cómo crear un libro Excel desde una aplicación Office
Continuando con el ejemplo, supongamos que en cada consulta se toma la tensión arterial a los pacientes y que necesitamos transferir estos datos a Excel para generar estadísticas. Por ejemplo, tensión arterial media trimestral, anual, etc. Para automatizar este proceso podríamos generar automáticamente una hoja de cálculo con, por ejemplo, la fecha y la tensión arterial sistólica y diastólica de un período determinado. Suponiendo que hemos situado el botón GenerarHC en el formulario de pacientes, el código del procedimiento sería el siguiente. No se olvide de referenciar a la librería Microsoft Excel Object Library desde el editor de Visual Basic de Access.

Private Sub GenerarHC_Click()
Dim DB As DAO.Database, Rs As DAO.Recordset
Dim i As Integer, j As Integer
Dim RsSql As String
Dim CurrentValue As Variant
Dim CurrentField As Variant
Dim Workbook As Object
Dim xlApp As Object
Dim Sheet As Object

Set DB = DBEngine.Workspaces(0).Databases(0)
‘Obtiene los registros de las tensiones
‘ del paciente activo
RsSql = “SELECT * FROM [Tension] WHERE [nHistorial]=” & Me!nHistorial & “;”

Set Rs = DB.OpenRecordset(RsSql, dbOpenDynaset)
Set xlApp = CreateObject(“Excel.Application”)
xlApp.workbooks.Add
‘Se posiciona en la primera hoja
Set Sheet = xlApp.activeworkbook.sheets(1)
‘Ajusta el contador para empezar en la fila 2
j = 1

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información