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???
| |||
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??? |
| |||
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:
Saludos, Foxi. Documento1.Selection.WholeStory ' Para seleccionar todo del doc1. Documento1.Copy Documento2.PasteAndFormat (wdPasteDefault) ' Pega lo copiado en doc2. |
| |||
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??? |
| |||
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????? |
| |||
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. |
| |||
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??? |
| |||
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!!! |
| |||
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 |
| |||
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:
Esto llamará a la siguiente función que igual te sirve: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
Código:
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...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 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... |