Generar un documento de Word desde Visual basic

De casualidad sabrás como puedo generar un documento de Word con los datos que ingreso en una forma de Visual basic. Quiero hacerlo así, porque la forma, después de generar el documento de Word debe guardar la información en una tabla de Access. El documento que tengo que generar es un contrato individual de personal, por lo que el 99% de la información ya está en el documento, solo tengo que agregar o insertar los datos que necesito para completarlo.

2 respuestas

Respuesta
1
Debes agregar una referencia a la aplicación Word y eso se hace en el menú "Proyecto > Referencias " y seleccionas la opción "Microsoft Word 9.0 Object Library" (o versión 8.0 o 7.0), esto es para que reconozca la creación del objeto para manipular el documento de Word.
Enseguida puedes crear con código el documento de Word
Private Sub cmdCrear_Click()
'Declara la variable.
Dim objWD As Word.Application
'Crea una nueva instancia de Word
Set objWD = CreateObject("Word.Application")
'Agrega un nuevo documento en blanco
ObjWD. Documents. Add
'Agrega Texto.
ObjWD. Selection. TypeText "Este es el texto que estoy agregando"
'Guarda el documento
objWD.ActiveDocument.SaveAs FileName:="mydoc.doc"
'Salir de Word.
ObjWD. Quit
'Quitarlo de memoria
Set objWD = Nothing
End Sub
O puedes abrir uno ya existente
Private Sub cmdAbrir_Click()
'Declara la variable.
Dim objWD As Word.Application
'Declara variable para el documento
Dim objDoc As Word.Document
'Crea una nueva instancia de Word
Set objWD = CreateObject("Word.Application")
'Indica el documento a abrir.
Set objDoc = objWD.Documents.Open(FileName:="C:\Mis documentos\mydocX.doc")
'Agrega Texto.
ObjWD. Selection. TypeText "Este es el nuevo texto"
'Guarda el documento
ObjWD. ActiveDocument. Save
'Salir de Word.
ObjWD. Quit
'Quítalos de memoria
Set objDoc = Nothing
Set objWD = Nothing
End Sub
Hasta pronto.
Respuesta
1
Tienes dos alternativas usar Referencias o crear objetos, para la primera tienes que crear una referencia a la biblioteca de objetos de Word, esta opción no me gusta mucho por que es dependiente de la versión que uses, para la segunda opción tienes las funciones CreateObject y GetObject, con la primera crearías archivos nuevos y con la segunda tendrías acceso a archivos existentes, por ejemplo
Dim docWord As Object
Set docWord = CreateObject("Word.Document")
o
Set docWord = GetObject("C:\MisDatos\Contrato.doc")
Para usar estas funciones debes de conocer los objetos, propiedades y métodos de la biblioteca de objetos de Word, que no es problema, por que en la ayuda de Word viene todo eso, como me mencionas que es un contrato de trabajo, ¿no te serviría usar combinar correspondencia?.
¿Cómo puedo combinar correspondencia desde VB a un documento de Word?
Usando los objetos, propiedades y métodos de Word, te anexo un procedimiento que uso en un programa, solo que esta muy especifico para mi base, y mis datos, tendrías que hacer varias pruebas antes de verlo funcionar, principalmente, tener una base de datos que se llame Datos.mdb en la ruta de tu programa, que esta base tenga una tabla llamada tblDatos con mínimo dos campos unos Nombre y Correo, el campo nombre lo inserta en el documento junto con el contenido de un cuadro de texto que se llama txtCuerpo, el campo correo lo uso para obtener las cuentas de correo a las que se enviara el documento combinado...
Option Explicit
Private Sub cmdEnviarCorreo_Click()
Dim objWord As Object 'Instancia de Word
Dim strMensaje As String 'Cuerpo del mensaje
Dim strConexion As String 'Conexion a la base de datos
Dim strSql As String 'Consulta de SQL
Dim strTitulo As String 'Titulo del mensaje
Dim strPLinea As String 'Primer linea del mensaje
Dim strSql2 As String 'Consulta personalizada
Dim bolPersonal As Boolean 'Si hay consulta personalizada
Dim Res As Integer 'Respuestas al MsgBox
'Contantes definidas para las propiedades y metodos de Word
Const wdFormLetters As Integer = 0 'Tipo de documento combinado
Const wdOpenFormatAuto As Integer = 0 'Apertura de formato automatico
Const wdSendToEmail As Integer = 2 'Combinar en correo electronico
Const wdDefaultFirstRecord As Integer = 1 'Primer registro por default
Const wdDefaultLastRecord As Integer = -16 'Ultimo registro por default
Const wdStory As Integer = 6 'Avance por documento
Const wdLine As Integer = 5 'Avance por linea
On Error GoTo err_Control
'Ruta de la base de datos
strBase = App.Path & "\Datos.mdb"
'Consulta SQL
strSql = "SELECT * FROM [tblDatos]"
strMensaje = Trim(txtCuerpo.Text)
'Creamos el documento de Word
Set objWord = CreateObject("Word.Document")
With objWord.Parent
.Selection.TypeText strMensaje 'Introduzco el mensaje
With .ActiveDocument.MailMerge 'Combino correspondencia
.MainDocumentType = wdFormLetters
'Establezco todas las propiedades
.OpenDataSource Name:=strBase, _
Format:=wdOpenFormatAuto, _
ConfirmConversions:=False, _
ReadOnly:=False, _
LinkToSource:=False, _
AddToRecentFiles:=False, _
PasswordDocument:="", _
PasswordTemplate:="", _
Revert:=False, _
WritePasswordDocument:="", _
WritePasswordTemplate:="", _
Connection:=strConexion, _
SQLStatement:=strSql, _
SQLStatement1:=""
'Edito el documento
.EditMainDocument
objWord.Parent.Selection.HomeKey Unit:=wdStory
objWord.Parent.Selection.EndKey Unit:=wdLine
'Le agrego el campo Nombre
.Fields.Add Range:=objWord.Parent.Selection.Range, _
Name:="Nombre"
'Le dijo que envie por correo el documento combinado
.Destination = wdSendToEmail
.MailAsAttachment = False
'Le dijo que campo tiene la direccion de correo
.MailAddressFieldName = "Correo"
.MailSubject = strTitulo
.SuppressBlankLines = True
'Le dijo que envie todos
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
'Ejecuto la combinacion
.Execute Pause:=False
End With
End With
'Ssalgo de Word
objWord.Parent.Application.Quit 0
'Libero la memoria
Set objWord = Nothing
MsgBox "Proceso terminado con exito", , "Envio de correo"
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas