VB6 - Llamar a WORD y Modificar una Carta Existente

Publicado en 'Programación' por Snoopy, 15 Jul 2007.





  1. Snoopy

    Snoopy Suspendido

    Registro:
    5 Nov 2006
    Mensajes:
    173
    Likes:
    0




    Haber muchachos, con este codigo van a poder Abrir un Documento Existente y Modificarlo

    Paso 1:

    Crea un documento cualquiera en Word y escribe lo siguiente:

    "Buenos Dias Sr. Orlando, como esta su esposa Roxana, espero que todo bien, les invito a mi fiesta el dia 02/09"

    Ahora, marca la Palabra Orlando y ve a
    Menu Inserta -> Marcador... y Ponle Destinatario

    Luego Marca la Palabra Roxana y haz lo mismo que antes, pero ponle como Nombre Esposa

    Finalmente haz lo mismo con la Fecha y llamalo Fecha

    Graba el Documento con el Nombre de "Carta.Doc"

    El Codigo:

    Haz la Referencia a "Microsoft Word xx Object Library" donde xx es segun la version que tengas instalada
    Pega 3 TextBox y llamalos: txtDestinatario, txtEsposa, txtFecha y un Boton de Comando y llamalo LlenaCarta

    Si, no les salio bien, aqui les tengo el Ejemplo :P
     
    Última edición: 3 Nov 2007


  2. telu

    telu Miembro nuevo

    Registro:
    23 Jul 2007
    Mensajes:
    18
    Likes:
    0
    Cómo Cierro Word?

    Hola amigo. Excelente aporte, sobre todo me gusta porque si haces la referencia correspondiente, te reconoce todos los objetos y al poner un punto, ya aparencen la propiedades y metodos disponibles. Pero el problema que tengo es que word queda abierto.
    Yo hice algo similar del siguiente modo:

    Dim Wappl As Object
    Set Wappl = GetObject(App.Path & "\retiros.doc")

    With Wappl
    .bookmarks("jd").Range = Datos.JurisdiccionDigito
    .bookmarks("od").Range = Datos.OficinaDigito
    End With
    Wappl.Application.Documents("inicio_retiromark.doc").Close
    Set Wappl = Nothing

    Con este codigo se cierra word, que es lo que quiero, aunque los objetos no son reconocidos, es decir yo pongo Wappl. y no me aparecen las propiedades y metodos, lo que me dificulta u poco porque tengo que pasarme vb de word para consultar la sintaxis. Además me tira un error:
    error en el metodo range del objeto bookmark
    no se si es que definì mal los marcadores, yo definì los marcadores poniendo el cursor en la posiciòn donde quiero insertar el dato (sin seleccionar nada).
    saludos, muchas gracias desde ya.
     
  3. Snoopy

    Snoopy Suspendido

    Registro:
    5 Nov 2006
    Mensajes:
    173
    Likes:
    0
    Intenta con esto

    PHP:
    Private Sub Form_Unload(Cancel As Integer)
    'Lo guardo para que cuando lo Cierre no me pregunte si deseo o no Guardar
        objWord.Documents(1).SaveAs app.path & "\Prueba.doc"
    '
    Descargo el Word
        objWord
    .Application.Quit
    'Destruyo el Documento
        Set objWord = Nothing
    End Sub

    Curiosamente el documento guardado Pierde los Bookmarks, habria que volver a crearlos en tal caso.

    Saludos y Bienvenido al Foro, yo estoy más aqui en el foro de Programación
     
  4. telu

    telu Miembro nuevo

    Registro:
    23 Jul 2007
    Mensajes:
    18
    Likes:
    0
    Gracias amigo por contestar, enseguida lo pruebo. Ahora quiero que me des tu opinión sobre lo que estoy haciendo:La razón por la que uso word es porque me permite justificar el texto, cosa que el DataReport no. y manipular un richtextbox me parece que es muy complicado, mas facil es un documento de word, bien formateado, con marcadores y listo para imprimir.
    El tema es que el programa tiene que funcionar en una red con mas de 50 computadoras conectadas a un servidor. Tengo la opción de instalar una copia del documento en cada maquina. O bien instalar el documento en el servidor, que sería lo ideal.
    si lo instalo en el servidor como hago para controlar los accesos simultáneos. se puede hacer que cree una instancia por cada cliente? y printout que impresora elegirá? la que esta como predeterminada en la maquina del cliente?

    Gracias desde ya, saludos
     
  5. Snoopy

    Snoopy Suspendido

    Registro:
    5 Nov 2006
    Mensajes:
    173
    Likes:
    0
    uhm... tu no estas haciendo un proyecto de Colegio por lo que veo....

    1.- Si, lo ideal es que lo tengas en el Server, cosa que si quieres modificar algo en el Documento todos tambien se modificaran (es una Copia)

    2.- Lo mejor que puedes hacer para crear una Instancia en cada PC es hacer una copia local (asi evitar que alquien modifique el Origen) en otras palabras, casa vez que necesites ese documento que descargue "La Plantilla" del Server (Filecopy en VB)

    3.- No te Compliques la existencia y usa el PrintOut de frente, usara la Impresora predeterminada (la que existe y funciona en la PC ya sea local o en Red) lo mandara a la cola y ese ya es asundo de Windows

    Saludos
     
  6. telu

    telu Miembro nuevo

    Registro:
    23 Jul 2007
    Mensajes:
    18
    Likes:
    0
    Hola amigo, Te agradezco mucho tus explicaciones.
    Probé el codigo para cerrar word ObjWord.Application.Quit y funciona perfectamente. Pero no le puse el comando SaveAs porque para lo que yo necesito, lo mejor será imprimir cerrar y salir, sin guardar nada.
    Para que me cierre sin guardar los cambios use:
    .Close wdDoNotSaveChanges

    No estoy seguro a cerca de hacer una copia del doc. en la maquina del cliente. No se si esto no consumirá muchos recursos de los ya escasos de la red. Aunque si no queda otra alternativa...
    Muchas gracias, Saludos
     
  7. Snoopy

    Snoopy Suspendido

    Registro:
    5 Nov 2006
    Mensajes:
    173
    Likes:
    0
    Si no vas a Guardar el documento, si tu intension es solo abrir, modificar los marcadores, imprimir y salir; entonces pon el documento compartido en una carpeta de SOLO LECTURA.

    Pero igual si haces una copia o lo abres desde el server, igualito va a transmitir el tamaño del Archivo a la PC Cliente; pero de eso ya se encargaria el Word y no tu codigo :D


    Conclusion:
    Deja el documento en el Server y abrelo desde tu codigo (objWord.Documents.Open "\\server\Carta.doc")


    PD: Yo preferiria hacer una copia al Cliente y Luego Abrirlo, cosa que si el Server esta apagado o borraron el Archivo, el programa usa la copia local y no se paralizaria por falta de ese archivo.
     
    Última edición: 26 Jul 2007
  8. telu

    telu Miembro nuevo

    Registro:
    23 Jul 2007
    Mensajes:
    18
    Likes:
    0
    Hola amigo, Interesante tus observaciones. Ahora ya se que lo mejor será que el doc. se quede en el servidor, ya que la base de datos está allí y si el servidor no funciona, nada tienen que imprimir.
    La única duda que me queda es: que pasa si abren el doc. varios clientes a la vez y cada uno carga datos distintos para imprimir. Si realmente se trabaja sobre un único documento esto podría causar sobre escritura, y para cuando un cliente envíe el doc. a la impresora los datos ya han cambiado.
    O tal vez cada cliente cree automáticamente una copia en la memoria y trabaje con ella, en ese caso todo funcionaria bien.
    Muchas gracias. Saludos
     
  9. Snoopy

    Snoopy Suspendido

    Registro:
    5 Nov 2006
    Mensajes:
    173
    Likes:
    0
    Cuando Word abre un Documento lo que hace es pasar el integro a la memoria (si esta en el server, lo jala integramente a la memoria del cliente) y no vuelve a tocar el original.

    Esto pasa con casi todos los programas, osea lo abren, lo leen y lo liberan y cuando grabas, lo sobreescribe (no aplicable en motores de base de datos o archivos abierto en modo exclusivo); incluso si tu abres un documento de WORD que ya ha sido abierto en modo exclusivo (opciones de apertura) el Word te mostrara un mensaje que dira algo asi: "El Archivo se encuentra abierto en modo exclusivo, desea abrirlo como solo lectura?"

    Conclusion: Efectivamente, cada cliente automaticamente crea una copia en la memoria y trabaja con ella

    Saludos
     
  10. telu

    telu Miembro nuevo

    Registro:
    23 Jul 2007
    Mensajes:
    18
    Likes:
    0
    Amigo *******, ¡¡No se como agradecerte la ayuda que me has dado!!, perfectamente aclarado el tema y solucionado mi problema.
    saludos
     
  11. Snoopy

    Snoopy Suspendido

    Registro:
    5 Nov 2006
    Mensajes:
    173
    Likes:
    0
    A que direccion remito la factura??

    jejeje,es broma, cuando quieras siempre me encuentras en este foro.

    Saludos
     
  12. criman

    criman Miembro nuevo

    Registro:
    13 Ene 2009
    Mensajes:
    1
    Likes:
    0
    gran aporte, es muy util para reemplazar el crystal report
     
  13. lolo400

    lolo400 Miembro nuevo

    Registro:
    7 Mar 2009
    Mensajes:
    1
    Likes:
    0
    Gracias gran aporte, es muy util para me sirve para modificar otros
     
  14. Slowogeid

    Slowogeid Miembro nuevo

    Registro:
    1 Mar 2010
    Mensajes:
    1
    Likes:
    0
    hola una pergunta y si lo quisiera guardar con otro nombre desde el programa de visual, ocea guardar como y colocarlo en otra ubicacion que codigo seria para realizar esta operacion.

    de antemano gracias
     
  15. peraza

    peraza Miembro nuevo

    Registro:
    14 Oct 2010
    Mensajes:
    1
    Likes:
    0
    con cual codigo no veo nada
     
  16. darkman31

    darkman31 Miembro nuevo

    Registro:
    20 Oct 2010
    Mensajes:
    1
    Likes:
    0
    enviame un codigo ... por que no me salio