Usar Bookmarks para rellenar un documento Word

Dudas sobre código
RafaelS
Nivel 1
Mensajes: 3
Registrado: Dom Feb 28, 2021 7:31 pm

Usar Bookmarks para rellenar un documento Word

Mensajepor RafaelS » Dom Feb 28, 2021 7:59 pm

Hola a todos
Acabo de empezar con VBA y esta es mi primera intervención, así que, mis disculpas de antemano si comento algún error de protocolo y gracias por vuestra ayuda.
Estoy intentando rellenar un documento plantilla de Word utilizando Bookmarks. Con los campos tipo texto no hay problema, pero estoy atascado con un campo tipo "Asistente de búsqueda complejo" (combobox) en el que tengo marcados varios valores. El código es este:

Dim nombreDoc As String
Dim objetoWord As Object
Dim documentoWord As Object

'nombre con el que se guardará el documento que vamos a crear
nombreDoc = Application.CurrentProject.Path & "\" & [Nombre].Value & " " & [Apellidos].Value & ".docx"

'abrimos el documento plantilla
Set objetoWord = CreateObject("Word.Application")
Set documentoWord = objetoWord.Documents.Open(Application.CurrentProject.Path & "\Plantilla\Test.docx")

'antes de guardar, borramos si ya existía
If Len(Dir(nombreDoc)) > 0 Then
Kill nombreDoc
End If

'guardamos el documento generado a partir de la plantilla
documentoWord.SaveAs nombreDoc

With documentoWord.Bookmarks
If .Exists("vNombre") Then
.Item("vNombre").Range.Text = [Nombre].Value 'Este funciona
End If

If .Exists("vApellidos") Then
.Item("vApellidos").Range.Text = [Apellidos].Value 'Este funciona
End If
If .Exists("vDireccion") Then
.Item("vDireccion").Range.Text = [Direccion].Value 'Este funciona
End If
If .Exists("vLesiones") Then
.Item("vLesiones").Range.Text = [Lesiones].Value 'Este NO FUNCIONA. Da un error de tipo
End If
End With

¿Cómo puedo volcar los valores guardados en Lesiones a mi documento de Word?
Gracias por la ayuda

DaniLopez1991
Nivel 5
Mensajes: 149
Registrado: Lun Sep 23, 2019 2:12 pm

Re: Usar Bookmarks para rellenar un documento Word

Mensajepor DaniLopez1991 » Lun Mar 01, 2021 9:58 am

Si los demás te funcionan este debería funcionar, quiero decir, que no debe ser error de sintaxis o de programación sino de los datos que estas capturando, quizá algún campo es demasiado largo.. quizá hay alguno que es nulo o no se... que error te da? el de conversión de tipos? que numero de error te da?

Mírate el campo "Vlesiones" depurando en la ventana de inmediato con un punto de interrupción y a ver que datos esta arrojando si coge alguno o directamente te da el error... Siento no ayudar mas!

Saludos

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 1308
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Usar Bookmarks para rellenar un documento Word

Mensajepor Sveinbjorn » Lun Mar 01, 2021 10:46 am

Hola Rafael, bienvenido al foro.

Si interpreto bien tu consulta, el problema está en que el campo "Lesiones" es un campo multivalor, y en access, los campos multivalor son unos bichos un poco raros y que se manejan de una forma un tanto diferente. Si estoy en lo cierto, echa un vistazo a este ejemplo de Neckkito en el que explica diversas formas de trabajar con esos campos: http://neckkito.xyz/nck/index.php/ejemp ... multivalor

No creo que tengas problemas en integrarlo en tu código, pero si así fuera, coméntalo y vamos viendo.

Un saludo
Sveinbjorn El Rojo

RafaelS
Nivel 1
Mensajes: 3
Registrado: Dom Feb 28, 2021 7:31 pm

Re: Usar Bookmarks para rellenar un documento Word

Mensajepor RafaelS » Lun Mar 01, 2021 12:17 pm

Gracias por la ayuda.
Sí, es lo que se explica en el PDF. Lo estudio un poco, intento aplicarlo y os cuento.

RafaelS
Nivel 1
Mensajes: 3
Registrado: Dom Feb 28, 2021 7:31 pm

Re: Usar Bookmarks para rellenar un documento Word

Mensajepor RafaelS » Mar Mar 02, 2021 5:24 pm

Hola de nuevo
Efectivamente, leer el PDF me ha permitido encontrar una solución. La pongo aquí por si a alguien le es útil:

'parte del programa para acceder al campo multivariable Lesiones y cargar su contenido en un String
Dim vIdPaciente As Long
Dim miSQL As String
Dim vBaseDeDatos As DAO.Database
Dim vRecordSetPrincipal As DAO.Recordset 'Leerá los datos del registro que tenemos en pantalla
Dim vRecordSetComboBox As DAO.Recordset2 'Leerá los datos del campo multivalor
Dim vLesiones As String

'Cogemos el identificador del cliente
vIdPaciente = Me.IdPaciente.Value

'Creamos una Sql con el registro que tenemos en pantalla
miSQL = "SELECT * FROM Paciente WHERE IdPaciente=" & vIdPaciente

'Creamos las instancias de la BD y de los RecordSets
Set vBaseDeDatos = CurrentDb
Set vRecordSetPrincipal = vBaseDeDatos.OpenRecordset(miSQL)
'Dentro del RecordSet Principal, accedemos a los valores del campo Lesiones
Set vRecordSetComboBox = vRecordSetPrincipal("Lesiones").Value

'Recorremos los datos del campo multivalor Lesiones
vRecordSetComboBox.MoveFirst
vLesiones = ""
Do Until vRecordSetComboBox.EOF
vLesiones = vLesiones & vRecordSetComboBox!Value & "; " 'Añadimos al String la lesión y un retorno de carro
vRecordSetComboBox.MoveNext
Loop

'cerramos todo
vRecordSetComboBox.Close
vRecordSetPrincipal.Close
vBaseDeDatos.Close
Set vRecordSetComboBox = Nothing
Set vRecordSetPrincipal = Nothing
Set vBaseDeDatos = Nothing
'*******************************************************************************************************

Con todo esto, he generado un String, que ahora SÍ, puedo incorporar a mi documento de Word.
Gracias por la ayuda y un saludo!!


Volver a “Código VBA”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado