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.
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.
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