PARA LOS MAESTROS DE VB, VBA Y WORD

Sebasgin
11 de Mayo del 2004
Hola. Mi nombre es Sebastián (otro) y estoy empezando con esto del VB.
Por mi profesión, trabajo mucho con documentos de texto (word) en los que me ha obligado a meterme de lleno con formularios y macros para agilizar tareas.
Hasta ahora me defiendo bien con el Visual Basic para aplicaciones que viene con el Office 2000 de Microsoft, diseñando plantillas y creando macros. El problema es que te limita a trabajar siempre bajo un documento de word (en mi caso) en que previamente debes haber abierto el documento para poder ejecutar el programa en VBA
La pregunta sería como relacionar por separado un documento de word con una plantilla de entrada de datos hecha en VB, para que cuado haga clic en un comandbutton me abra el documento de word y añada los datos de los textbox en dicho documento.

Como no sé si me he explicado bien, voy a decirlo de otra manera: lo primero es crear con VB una interfaz con varios textbox para entrada de datos y un comandbutton.
Lo segundo es diseñar en Microsoft word un documento con campos y marcadores.
La idea es que cuando haga clic en el comandbutton, se abra el documento de word y exporte los datos de los textbox en los campos marcados previamente.

La interfaz de VB y el documento de WD ya las tengo diseñadas, solo me falta el código que llame al documento y exporte los datos.

Otra pregunta que tengo, abusando de vuestra confianza, es si fuese posible ejecutar automáticamente una macro en word cuando se abra el documento en cuestión que tiene dicha macro.

Bueno, pido perdón por el royo, y agradecido de antemano a todas las respuestas. si las hay.
Salu2

sdemingo
11 de Mayo del 2004
Muy buenas,

Parece que tienes todo bastnate dominado salvo la parte de instanciar un objeto desde VB para tener el control del documento word.

Bueno, para tu segunda pregunta, debes meter el código en ThisDocument en la siguiente subrutina:

Private Sub Document_Open()

End Sub

Todo lo que vaya ahí dentro se ejecutará al abrir el documento automáticamente.

En cuanto a la primera pregunta, es decir, el código que tienes que asociar al evento click del botón para que abra tu plantilla y genere el documento es el siguiente:

Dim wordApp as Object

Set wordApp = CreateObject("Word.Application")

'Visible
wordApp.Application.Visible = True
'Maximizada
wordApp.Application.WindowState = 1
'Abro el documento
wordApp.Documents.Open FileName:="c:Documento.doc", ReadOnly:=False

A partir de este momento, trabajarás igual que en una macro de vba (como estás acostumbrado) pero siempre anteponiendo en cada sentencia el objeto WordApp, es decir:
Para posicionarte en un marcador de tu plantilla:
If wordApp.Documents("c:Documento.doc").Bookmarks.Exists(tuMarcador) = False Then
MsgBox "Alguna de las marcas buscadas en la plantilla no existen." & Chr(13) & Chr(10) & _
"Puede que no haya elegido correctamente la plantilla o que esté incompleta." & Chr(13) & Chr(10) & _
"El proceso de impresión del Documento finalizará.", vbCritical + vbOKOnly, "Texto Articulado"

wordApp.Documents("c:Documento.doc").Close SaveChanges:=0
Set wordApp = Nothing
Else
wordApp.Documents("c:Documento.doc").Bookmarks(tuMarcador).Select
End If

Para llamar a Macros del documento sería así:

wordApp.Application.run "NombreSubrutina", param1, param2, param3, ......

Una vez hayas acabado el proceso:
'Salvas
wordApp.Documents("C:Documento.doc").SaveAs FileName:="c:NombreFinal.doc"
'Cierras el documento
wordApp.Documents("c:NombreFinal.doc").Close
'Cierras Word
wordApp.Application.Quit
'Vacías el objeto
Set wordApp = Nothing


Espero que esto te ayude ;-)

Si tienes alguna duda visita mi foro
http://boards.melodysoft.com/sdemingo

salu2
sdemingo

Sebasgin
11 de Mayo del 2004
FUNCIONAAAAA. He puesto en práctica tus indicaciones sobre la ejecución automática de la macro y .... EUREKA, es justo lo que yo quería.

Gracias sdemingo por tu rápida respuesta. mañana pondré en práctica las otras indicaciones que me dices, a ver que tal rula. Aunque aquí no creo que lo tenga tan fácil.

Por cierto, he echado un vistazo a tu foro y me parece muy interesante (lo he metido en "favoritos") Seguro que “nos veremos” más a menudo por esos lares.
Insisto GRACIAS por tu ayuda.

Salu2.