Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Copiar y pegar todo el texto de un Word a otro mediante visual basic 6.0

Estas en el tema de Copiar y pegar todo el texto de un Word a otro mediante visual basic 6.0 en el foro de Visual Basic clásico en Foros del Web. Hola!!! Tengo el siguiente código: WorApp.Selection.InsertFile FileName:=dire, Link:=True Donde en dire se guardaría el documento al que se le van a pegar los datos. Pero ...
  #1 (permalink)  
Antiguo 08/04/2008, 02:15
 
Fecha de Ingreso: octubre-2007
Mensajes: 36
Antigüedad: 16 años, 6 meses
Puntos: 0
Copiar y pegar todo el texto de un Word a otro mediante visual basic 6.0

Hola!!!

Tengo el siguiente código:

WorApp.Selection.InsertFile FileName:=dire, Link:=True

Donde en dire se guardaría el documento al que se le van a pegar los datos.

Pero no me acaba de funcionar... alguien sabe como hacerlo???
  #2 (permalink)  
Antiguo 09/04/2008, 03:30
 
Fecha de Ingreso: marzo-2008
Mensajes: 35
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Copiar y pegar todo el texto de un Word a otro mediante visual basic 6.0

Lo primero comentarte que el funcionamiento de InsertFile es al revés de lo que creo que estás intentando:
En tu código:
WorApp.Selection.InsertFile FileName:=dire, Link:=True
Se introduciría el texto del documento que estuviese en dire en la posición actual del documento referenciado con WorApp, y no al revés.

De todas formas, yo he conseguido que esto funcione correctamente con archivos de origen .txt, y no con archivos Word.

Puedes probar a abrir los dos archivos, y copiar / pegar de uno al otro:

Código:
 
 
  Documento1.Selection.WholeStory ' Para seleccionar todo del doc1.
  Documento1.Copy
  Documento2.PasteAndFormat (wdPasteDefault) ' Pega lo copiado en doc2.
Saludos, Foxi.
  #3 (permalink)  
Antiguo 09/04/2008, 04:29
 
Fecha de Ingreso: octubre-2007
Mensajes: 36
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Copiar y pegar todo el texto de un Word a otro mediante visual basic 6.0

Ya consigo pegarlo!!! Pero como tendría q hacer por ejemplo para pasar unas variables a este nuevo documento??? Es decir que me ejecute un for en el nuevo en el q pego todo

Te pongo el código:

.Application.Selection.TypeText "Nº Cuestionario" + " " & numinicio
.Selection.WholeStory
.Selection.Copy
Set oword = CreateObject("Word.Application")
oword.Visible = True
Set oDoc = oword.Documents.Add
.Selection.PasteAndFormat (wdPasteDefault)
numinicioval = numinicio + 1
.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
'Para que en todos los encabezados sea igual

'Para alinear el texto a la derecha



.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
Documento.Selection.Font.Name = "Times News Roman"
Documento.Selection.Font.Size = 11

For i = numinicioval To numfinal
.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
.Application.Selection.TypeText "Nº Página" & vbNewLine

.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
Documento.Selection.Sections(1).Headers(1).PageNum bers.Add PageNumberAlignment:= _
wdAlignPageNumberRight, FirstPage:=True


Documento.Selection.Font.Name = "Times News Roman"
Documento.Selection.Font.Size = 11
With Selection.ParagraphFormat

.RightIndent = CentimetersToPoints(0.11)
.SpaceBeforeAuto = False
.SpaceAfterAuto = False

End With
.Application.Selection.TypeText "Nº Cuestionario" + " " & i
Next i

Aqui lo q pretendo es q en el encabezado me ponga el primer valor de un textbox y que cuando copiemos/pegemos todo en un word nuevo siga ejecutando el For en os nuevos documentos que se originen.
El problema es q los resultados de ese For solo me aparecen en el primer documento y no en los demás.

Algún consejo???
  #4 (permalink)  
Antiguo 09/04/2008, 05:26
 
Fecha de Ingreso: octubre-2007
Mensajes: 36
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Copiar y pegar todo el texto de un Word a otro mediante visual basic 6.0

Bueno el codigo mas bien queda así (alguna ayuda??):

.Selection.WholeStory
.Selection.Copy
.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
'Para que en todos los encabezados sea igual

'Para alinear el texto a la derecha



.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
Documento.Selection.Font.Name = "Times News Roman"
Documento.Selection.Font.Size = 11


.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
.Application.Selection.TypeText "Nº Página" & vbNewLine

.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
Documento.Selection.Sections(1).Headers(1).PageNum bers.Add PageNumberAlignment:= _
wdAlignPageNumberRight, FirstPage:=True


Documento.Selection.Font.Name = "Times News Roman"
Documento.Selection.Font.Size = 11
With Selection.ParagraphFormat

.RightIndent = CentimetersToPoints(0.11)
.SpaceBeforeAuto = False
.SpaceAfterAuto = False

End With

.Application.Selection.TypeText "Nº Cuestionario" + " " & numinicio

numinicioval = numinicio + 1
For i = numinicioval To numfinal
Set oword = CreateObject("Word.Application")
oword.Visible = True
Set oDoc = oword.Documents.Add
.Selection.PasteAndFormat (wdPasteDefault)

.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
'Para que en todos los encabezados sean iguales

'Para alinear el texto a la derecha



.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
Documento.Selection.Font.Name = "Times News Roman"
Documento.Selection.Font.Size = 11


.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
.Application.Selection.TypeText "Nº Página" & vbNewLine

.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
Documento.Selection.Sections(1).Headers(1).PageNum bers.Add PageNumberAlignment:= _
wdAlignPageNumberRight, FirstPage:=True


Documento.Selection.Font.Name = "Times News Roman"
Documento.Selection.Font.Size = 11
With Selection.ParagraphFormat

.RightIndent = CentimetersToPoints(0.11)
.SpaceBeforeAuto = False
.SpaceAfterAuto = False

End With
.Application.Selection.TypeText "Nº Cuestionario" + " " & i
Next i



'intro



'mostramos documento
.Application.Visible = True
End With
Set Documento = Nothing

Lo dicho alguna ayuda?????
  #5 (permalink)  
Antiguo 09/04/2008, 07:00
 
Fecha de Ingreso: marzo-2008
Mensajes: 35
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Copiar y pegar todo el texto de un Word a otro mediante visual basic 6.0

No entiendo exactamente qué es lo que estás preguntando...

De todas formas te puedo dar un par de sugerencias, sobre lo que veo, que no tengo claro del todo si van a solucionar tu problema:
- El código que has puesto parece que se repite, por lo que tiene toda la pinta de que tendrías que haber utilizado una función o un procedimiento.
- A la función que necesitas puedes pasarle como referencia la variable "Documento", y así poder continuar como si estuvieses en el mismo código, o también la variable numérica que indicará el número de cuestionario, y otras variables que te hagan falta.
- Me doy cuenta de que al código que has mostrado le faltan líneas; ´De todas formas, me he fijado que estableces las variables "oword" y oDoc", pero que luego no las liberas... Ten cuidado con eso.

- Te aconsejo también un poco de organización en el código... Además de utilizar las opciones que te da el constructor de mensajes de "Foros del Web" (Me refiero exactamente al icono "#" que se utiliza para definir código más claramente).

Saludos, Foxi.
  #6 (permalink)  
Antiguo 09/04/2008, 08:22
 
Fecha de Ingreso: octubre-2007
Mensajes: 36
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Copiar y pegar todo el texto de un Word a otro mediante visual basic 6.0

Lo que el código hace es recoger un numero de inicio y final de textboxes y luego pone en el encabezado el numero de pagina actual y nº cuestionario que tiene que ir del rango numinicio hasta numfinal que le pones pero repitiendose por cada página.

Lo que tenia pensado es poner el primer encabezado, copiar el texto entero y pegarlo en los documentos word que se generan en el For del código para que por cada documento nuevo que se cree se incremente la "i" y asi ir mostrando los numeros de cuestionario en todas las páginas. Es decir: 1º word= Nº pagina 1 nº cuestionario 1(el de numinicio), Nº pagina 2 nº cuestionario 1 (así con todas las paginas).

Luego copio y pego en un word nuevo en el que por medio del for me genera que salga Nº pagina 1 nº cuestionario 2, nº pagina 2 nº cuestionario 2...(generando documentos word hasta llegar al numfinal)

De momento el código me genera los documentos word necesarios pero no me pega el texto en ellos, y ademas me muestra los resultados pero en lso encabezados del primer documento en vez de repartirse entre los que se generan.

Tienes alguna idea de como podría ser???
  #7 (permalink)  
Antiguo 09/04/2008, 10:09
 
Fecha de Ingreso: octubre-2007
Mensajes: 36
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Copiar y pegar todo el texto de un Word a otro mediante visual basic 6.0

Bueno resulta que no tiene que habrir por cada numero de cuestionario y pegar en el nuevo word los datos; si no que tienen que ir pegandose en el mismo documento.

Le he quitado la parte de código que habre un nuevo word para pegar en el los datos y se queda asi:

.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
'Para que en todos los encabezados sea igual

'Para alinear el texto a la derecha

.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
Documento.Selection.Font.Name = "Times News Roman"
Documento.Selection.Font.Size = 11


.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
.Application.Selection.TypeText "Nº Página" & vbNewLine

.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
Documento.Selection.Sections(1).Headers(1).PageNum bers.Add PageNumberAlignment:= _
wdAlignPageNumberRight, FirstPage:=True


Documento.Selection.Font.Name = "Times News Roman"
Documento.Selection.Font.Size = 11
With Selection.ParagraphFormat

.RightIndent = CentimetersToPoints(0.11)
.SpaceBeforeAuto = False
.SpaceAfterAuto = False

End With

.Application.Selection.TypeText "Nº Cuestionario" + " " & numinicio

numinicioval = numinicio + 1
For i = numinicioval To numfinal
.Selection.WholeStory
.Selection.Copy
.Selection.PasteAndFormat (wdPasteDefault)

.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
'Para que en todos los encabezados sean iguales

'Para alinear el texto a la derecha

.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
Documento.Selection.Font.Name = "Times News Roman"
Documento.Selection.Font.Size = 11


.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
.Application.Selection.TypeText "Nº Página" & vbNewLine

.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
Documento.Selection.Sections(1).Headers(1).PageNum bers.Add PageNumberAlignment:= _
wdAlignPageNumberRight, FirstPage:=True


Documento.Selection.Font.Name = "Times News Roman"
Documento.Selection.Font.Size = 11
With Selection.ParagraphFormat

.RightIndent = CentimetersToPoints(0.11)
.SpaceBeforeAuto = False
.SpaceAfterAuto = False

End With
.Application.Selection.TypeText "Nº Cuestionario" + " " & i
Next i


'mostramos documento
.Application.Visible = True
End With
Set oword = Nothing
Set Documento = Nothing

El fallo que me da es un mensaje que no puede insertar saltos de edicion en encabezados ni pies.
Existe algún código que haga que sepueda ir al final de la ultima hoja del documento para que se peguen ahí los datos??

Gracias!!!
  #8 (permalink)  
Antiguo 10/04/2008, 02:56
 
Fecha de Ingreso: octubre-2007
Mensajes: 36
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Copiar y pegar todo el texto de un Word a otro mediante visual basic 6.0

He pensado en crear una macro en el word y pasar el codigo al visual basic.
Lo que hago es copiar todo el texto, ir al final del documento, pasar a un nuevo documento y pegar ahi todo para que luego me ejecute el FOR.

Esa parte de codigo queda asi:

#################
.Selection.WholeStory
.Selection.Copy
#################

Luego introduzco los encabezados y primeros resultados....

################################################## ######
.Application.Selection.EndKey Unit:=wdStory
.Application.Selection.InsertBreak Type:=wdPageBreak
.Application.Selection.PasteAndFormat (wdPasteDefault)
################################################## #

Aqui paso al final y a una nueva hoja y pego; y apartir de ahi ejecuto el FOR.
Lo que ocurre es que me dice que el objeto hace referencia a un encabezado o pie de pagina y que el metodo o proiedad no está disponible; refiriendose a la linea para pasar a una página siguiente y la linea para pegar el texto.
Aparte de que creo q no me copiaria los siguentes resultados del Nº de cuestionario donde tiene que hacerlo.

El código queda así en global:

################################################## ###
With Documento
.Application.Documents.Open App.Path & "\Trasplante.doc"
'final del documento
.Application.Selection.EndKey wdStory
'intro
.Application.Selection.TypeParagraph
'introduccion de Encabezado
.Selection.WholeStory
.Selection.Copy
.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader

'Para alinear el texto a la derecha

.Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
Documento.Selection.Font.Name = "Times News Roman"
Documento.Selection.Font.Size = 11


.Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
.Application.Selection.TypeText "Página" & vbNewLine

.Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
Documento.Selection.Sections(1).Headers(1).PageNum bers.Add PageNumberAlignment:= _
wdAlignPageNumberLeft, FirstPage:=True


Documento.Selection.Font.Name = "Times News Roman"
Documento.Selection.Font.Size = 11

.Application.Selection.TypeText " " & numinicio

.Application.Selection.TypeText " " + "Cuestionario"


.Application.Selection.EndKey Unit:=wdStory
.Application.Selection.InsertBreak Type:=wdPageBreak

.Application.Selection.PasteAndFormat (wdPasteDefault)
numinicioval = numinicio + 1
For i = numinicioval To numfinal


.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader

'Para alinear el texto a la Izquierda

.Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
Documento.Selection.Font.Name = "Times News Roman"
Documento.Selection.Font.Size = 11


.Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
.Application.Selection.TypeText "Página" & vbNewLine

.Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
Documento.Selection.Sections(1).Headers(1).PageNum bers.Add PageNumberAlignment:= _
wdAlignPageNumberLeft, FirstPage:=True


Documento.Selection.Font.Name = "Times News Roman"
Documento.Selection.Font.Size = 11

.Application.Selection.TypeText " " & i

.Application.Selection.TypeText " " + "Cuestionario"

.Application.Selection.EndKey Unit:=wdStory
.Application.Selection.InsertBreak Type:=wdPageBreak
.Application.Selection.PasteAndFormat (wdPasteDefault)

Next i

'mostramos documento
.Application.Visible = True
End With
Set Documento = Nothing
Set oword = Nothing
################################################## #######################################33

Alguna idea??

Última edición por iaras66; 10/04/2008 a las 03:05
  #9 (permalink)  
Antiguo 14/04/2008, 11:42
 
Fecha de Ingreso: marzo-2008
Mensajes: 35
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Copiar y pegar todo el texto de un Word a otro mediante visual basic 6.0

Es un poco raro lo que entiendo que intentas, pero aún así no me rindo... A ver esto:

Para cualquier otro usuario: Añadir la referencia "Microsoft Word 11.0 Object Library" o similar...

Código:
Private Sub Form_Load()
Dim Documento As New Word.Application
Dim indice As Integer
    
    With Documento
        
        For indice = 1 To 2
            'abre un documento
            Call .Application.Documents.Open("c:\ejemplo" & CStr(indice) & ".doc")
            
            ' Establecemos la cabecera con un índice.
            If (EstablecerCabecera(indice, Documento) = True) Then
                ' Ok.
            End If
            
            ' Salvar y cerrar.
            .Application.Documents.Save
            .Application.Documents.Close
        Next
        
    End With
    Set Documento = Nothing
    
End Sub
Esto llamará a la siguiente función que igual te sirve:

Código:
Private Function EstablecerCabecera(ByVal v_nNumCuestionario As Integer, _
        ByRef r_Doc As Word.Application) As Boolean
    
    EstablecerCabecera = False
    On Error GoTo ERROR_FUNC
    
    With r_Doc
        
        ' Vista de la cabecera.
        .ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
        
        ' Para alinear el texto a la derecha
        .Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
        
        ' Fuente.
        .Selection.Font.Name = "Times News Roman"
        .Selection.Font.Size = 11
        
        ' Página dinámica y Cuestionario...
        .Application.Selection.TypeText "Página "
        .Selection.Fields.Add Range:=.Selection.Range, Type:=wdFieldPage
        .Application.Selection.TypeText vbNewLine
        .Application.Selection.TypeText "Cuestionario " & CStr(v_nNumCuestionario)
        
        ' Vista del documento.
        .ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
        
        'mostramos documento
        .Application.Visible = True
        
    End With
    
    EstablecerCabecera = True
    
    Exit Function
    
ERROR_FUNC:
    Call MsgBox("Error: " & Err.Description)
End Function
Lo que hago es abrir dos documentos Word "c:\ejemplo1.doc" y "c:\ejemplo2.doc", a los cuales les asigno el número de página automático y un número de cuestionario i ==> Siendo i = 1 para el primer doc...

Aprovecha el código... Saludos, Foxi.

PD: Lo del icono "#" no era referido al caracter "#", pero ya irás aprendiendo a medida que utilices el foro... Además de las Caritas, intenta usar negritas y dar formatos, y puede que te acerces a lo que me refiero...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:54.