• Sábado 9 de Noviembre de 2024, 02:25

Autor Tema:  Re: word con visual basic  (Leído 1176 veces)

terremoto60

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: word con visual basic
« en: Viernes 4 de Abril de 2003, 00:38 »
0
Porfavor quiesiera que me ayudaran.
Les esplico, lo que pasa es que tengo un archivo de word que dice por ejemplo:

 .....el nombre es : para efectos .......

lo que yo quiero es que el textbox que yo escriba aparesca despues de los dos puntos y quede grabado en el archivo de word.

desde ya muchas gracias

J.M.Movilla

  • Miembro MUY activo
  • ***
  • Mensajes: 427
    • Ver Perfil
Re: word con visual basic
« Respuesta #1 en: Viernes 4 de Abril de 2003, 11:14 »
0
Vamos a ver si consigo darte una solución a tu problema (si me deja Internet, porque ayer en dos ocasiones tuve esta respuesta escrita y me quedé con dos palmos de narices ante el letrero de "Página no responde"...)

' ---------------------------------------------

En tu documento de Word pones

....  el nombre es :  @TBOX01@ para efectos....

Esto te va a permitir luego sustituir esa "macro" @TBOX01@ por el contenido de un textbox o de un campo de tu base de datos...

Igualmente podrás poner otras "macros" (@TBOX02@, @TBOX03@, etc.) y hacer automáticamente las "macrosustituciones" correspondientes.

LUEGO GRABAS ESE DOCUMENTO EN FORMATO .RTF   A partir de ahora tu documento se llamará "Documento.rtf", que lo va a tratar Word de forma más ágil que un .doc

' ---------------------------------------------


En tu aplicación insertas este código, para ejecutarlo por ejemplo cuando pulses un CommandButton que se llame CmdImprimirWord


Dim w As New Word.Application
Dim cFich As String, wFich As String


Private Sub CmdImprimirWord()
   
    cFich = "NOMBRE DE TU PLANTILLA DE WORD.rtf"
    wFich = "Temporal.rtf"

    ' Copiamos tu plantilla en otro Fichero para el Informe y no machacar la plantilla
    FileCopy cFich, wFich

    CambiaMacros

    if Dir( cFich) <> "" then
        ' No hubo error al hacer las "macrosustituciones"
        w.Documents.Open (wFich)
        w.Caption = "MS-Word - Creando informe"
        w.Visible = True
        w.WindowState = wdWindowStateMaximize
        Set w = Nothing
        ' Borro el fichero temporal de informe
        Kill(wFich)
    End If
End Sub


Private Function CambiaMacros()
    Dim nHandle%
    Dim strBuffer As String
    Dim n As Long
    Dim strText As String
    Dim strPrem As String
    Dim strPost As String
    Dim cMacro As String
    Dim cStrB As String
    Dim cTit As String
    Dim lFallo As Boolean
     
    strText = ""
    nHandle% = FreeFile
    Open wFich For Input As #nHandle%
    Do While Not EOF(nHandle%)
        Line Input #nHandle%, strBuffer
        strText = strText & strBuffer & vbCrLf
    Loop
    Close #nHandle%
   
    cStrB = "@"
    n = InStr(1, strText, cStrB)

    do while n <> 0
        If Mid(strText, n + 7, 1) = cStrB Then
            cTit = ""
            cMacro = UCase(Mid(strText, n, 8))
           
            If cMacro = "@TBOX01@" Then           ' Para sustituir por el primer textbox
                cTit = text1.text
                ' Aunque también podrías sustituirlo por un campo de una tabla: cTit = Db.Tab!NombreCliente...
            ElseIf cMacro = "@TBOX02@" Then       ' Para sustituir por el segundo textbox
                cTit = text2.text
'
'  Cuantos casos precises incustar en la plantilla
'

            Else
                ' Por si se ha incluido una "macro" mal redactada
                MsgBox("Revise la Plantilla :" & Chr(10) & _
                    "Ha introducido como ""macro"" la palabra " & cMacro & Chr(10) & _
                    "y no ha diseñado la SQL de conversión para tal ""macro"".", vbCritical)
                lFallo = True
                Exit Do
            End If
        Else
            n = InStr(n + 1, strText, cStrB)
        End If

        strPost = Mid(strText, n + 8)
        strPrem = Left(strText, n - 1)
        If cTit <> "" Then
            strText = strPrem & cTit & strPost
            ' Busca si la plantilla tiene más "macros"
            n = InStr(n + 9, strText, cStrB)
        Else
            strText = strPrem & strPost
            n = InStr(n + 1, strText, cStrB)
        End If

        If Len(strPost) < 8 Then Exit Do
       
    Loop
   
    If lFallo Then
        ' Hubo error en una "macro"
        Kill(wFich)
        wFich = ""
        exit Function
    End If
   
    nHandle% = FreeFile
    Open wFich For Output As #nHandle%
    Print #nHandle%, strText
    Close #nHandle%
    CmdSust.Visible = False
   
End Function

' --------------------------------------

Espero te vaya bonito...

Saludos y suerte

Majuhemo

  • Miembro activo
  • **
  • Mensajes: 85
    • Ver Perfil
word con visual basic
« Respuesta #2 en: Viernes 4 de Abril de 2003, 15:50 »
0
Hola:

yo he realizado algo parecido, pero utilizando "MARCADORES" en word.
Si tu tienes:

el nombre es : <Insertar marcador(ej.MyNombre)>
para efectos  : <Insertar marcador(Ej.MyEfectos)>

lo grabas normal como *.doc
en visual harias lo siguiente:

Set obj = New Word.Application
obj.Documents.Open FileName:="" & App.Path & "DocumentoPrueba.doc"

obj.Selection.GoTo What:=wdGoToBookmark, Name:="MyNombre"
obj.Selection.TypeText text1.Text
obj.Selection.GoTo What:=wdGoToBookmark, Name:="MyEfectos"
obj.Selection.TypeText text2.Text

'****grabas el archivo ****

obj.ActiveDocument.SaveAs FileName:="" & App.Path & "DocumentoGenerado.doc"

'****si deseas imprimes ****

obj.PrintOut (False)
obj.Quit SaveChanges:=wdDoNotSaveChanges
Set obj = Nothing


Obviamente tendrias que validar si el archivo existe, ademas generar el nombre del archivo a grabar.

Saludos;

Ruben Delgado
Ruben Delgado A.
rudela@msn.com
Lima-Peru