Visual Basic - Texto de visual a word

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Texto de visual a word

Publicado por Armando (3 intervenciones) el 03/05/2019 21:34:38
Hola buenas noches, a ver si me podeis ayudar que ando loco con este tema.

Tengo en el trabajo unas plantillas en word (.dotx) en las cuales hay que repetir muchas veces el mismo texto, (ejemplo el nombre y apellidos de una persona).

Estoy tratando de hacer un proyecto en visual en el cual pueda desde el mismo, hacer un formulario y rellenar en este unos datos, añadirle además un boton que tras pulsarlo, me abra el documento word (.dotx) y me rellene los campos que son repetitivos.

He visto algunos ejemplos de esto pero no se como lo hacen:

- He visto que los documentos de word, tienen códigos para que sean encontrados en la ejecución del botón y sean cambiados por lo rellenado en el formulario (son %nombre%).

- También he visto que además de la aplicación, en la carpeta de instalación del programa hay una base de datos de access con solo una tabla que reúne los datos que posteriormente van a ser trasladados en el word, aunque mi intención prioritaria no es acumular datos sino trasladar ciertos datos al word.

Por tanto no se como se haría esta cuestión, ni si sería rellenando campos (supongo que textbox) en el formulario y después a través del botón y a través de código se podrá pasarlos a word, o si se tendrá que hacer un formulario que realmente dará entrada a la tabla de access y el botón lo que hace es a través de código llamar y recoger datos de la tabla.

La verdad es que no tengo ni idea, pero estoy elaborando el proyecto (por supuesto freeware) para que pueda ayudar a espero muchos compañeros y no tengo ni idea de como hacerlo.

Me podéis ayudar? En resumen sería a través de visual, pasar determinados datos a un documento word y esos datos se repiten en varias ocasiones en el documento.

De antemano muchisimas gracias y espero vuestra ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de gilman
Val: 516
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Texto de visual a word

Publicado por gilman (281 intervenciones) el 04/05/2019 08:56:25
En el archivo adjunto tienes un proyecto que entre otras cosas hace lo que tú necesitas.
En el docuento generado están las instrucciones necesarias, está basado en una plantilla dot, pero no creo que deba dejar de funcionar si la plantilla es dotx, salvo el tema de la macro pero se podría eliminar ya que esa parte no está concluida.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Texto de visual a word

Publicado por Armando (3 intervenciones) el 09/05/2019 10:47:21
Muchisimas gracias por tu respuesta, creo que no es exactamente lo que buscaba ya que hace referencia a marcadores y referencias cruzada y no es exactamente lo que busco o yo no he sabido trabar con él pero me ha dado pie a encontrar como poder llevar a cabo el proyecto.

El problema ahora es el siguiente, he conseguido que me abra un documento y me traslade datos pero me da un error 462 que no se resolver, puedes ayudarme a ver el problema y facilitarme la solución?

Te dejo el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub Command1_Click()
Static wd1 As Word.Application
Static wd1Doc As Word.Document
Set wd1 = New Word.Application
wd1.Visible = True
 
Set wd1Doc = wd1.Documents.Add("C:\Users\usuario\Desktop\prueba.docx")
 
For Each myStoryRange In ActiveDocument.StoryRanges
        With myStoryRange.Find
        .Text = "aaa"
        .Replacement.Text = "bbb"
        .Wrap = wdFindContinue
        .ClearFormatting
        .Replacement.ClearFormatting
        .Replacement.Highlight = False
        .Execute Replace:=wdReplaceAll
    End With
 
Next myStoryRange
End Sub


La primera vez que lo ejecuto va todo perfecto, pero si cierro el documento que me crea bien y vuelvo a pulsar el boton que me origina el documento, me sal el error 462 "el equipo o servidor remoto no existe o no está disponible".

Me podríais decir como solucionar este problemón.

Muchisimas gracias de antemano!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 516
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Texto de visual a word

Publicado por gilman (281 intervenciones) el 09/05/2019 13:22:47
El problema con tu código está en la sentencia:
1
For Each myStoryRange In ActiveDocument.StoryRanges
El ActiveDocument se ha quedado, por decirlo de alguna manera, "enganchado" a la anterior instancia de Word, para que el código funcione sustitúyela por
1
For Each myStoryRange In wd1.ActiveDocument.StoryRanges
La declaración como Static de las variables wd1 y wd1Doc, es superflua, siempre creas nuevas instancias, así que mejor que la cambies a Dim
El código funciona, pero tiene un problema, si en el documento aparece el texto aaa en algún lugar que no se debería reemplazar también lo haría, con el proyecto que yo incluía, aúnque tenía el problema del error 462 esto no pasaría
Por otro lado lo lógico es que uses una plantilla en vez de un documento, si usas un documento el usuario final podría, sin advertirlo, guardar el archivo original y a partir de ese momento dejar de funcionar.

El proyecto que adjunte originalmente si que te servía, de hecho hacía mas cosas.
Lo he simplificado para que solo haga lo justo, es decir, solo poner el texto que se introduzca en cada una de las referencias, también he puesto un ejemplo de lo que puede pasar con el reemplazo de textos si no se tiene cuidado.
En las plantillas se explica un poco lo que pasa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar