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

Mediante V.B 6.0 introducir en el encabezado de un Word texto

Estas en el tema de Mediante V.B 6.0 introducir en el encabezado de un Word texto en el foro de Visual Basic clásico en Foros del Web. HOLA!!! Alguien podría ayudarme para introducir un texto en un documento Word en el encabezado de la derecha y en el de la izquierda??? Tengo ...
  #1 (permalink)  
Antiguo 31/03/2008, 02:55
 
Fecha de Ingreso: octubre-2007
Mensajes: 36
Antigüedad: 16 años, 6 meses
Puntos: 0
Mediante V.B 6.0 introducir en el encabezado de un Word texto

HOLA!!! Alguien podría ayudarme para introducir un texto en un documento Word en el encabezado de la derecha y en el de la izquierda???
Tengo parte del código hecho pero me va mal...


Tengo el siguiente codigo implementado:

Private Sub Form_Load()
Dim Documento As New Word.Application
With Documento
'abre un documento
.Application.Documents.Open App.Path & "C:\Proyecto\ejemplo.doc"


'introduccion de texto
Selection.HeaderFooter.PageNumbers.Add PageNumberAlignment:= _
wdAlignPageNumberRight, FirstPage:=True


.Application.Selection.MoveRight Unit:=wdCharacter, Count:=19
.Application.Selection.MoveUp Unit:=wdLine, Count:=1
.Application.Selection.TypeText "Ejemplo de prueba2"
'intro

'intro
.Application.Selection.TypeParagraph
.Application.Selection.TypeParagraph
.Application.Selection.TypeParagraph

'introduccion de texto
Selection.HeaderFooter.PageNumbers.Add PageNumberAlignment:= _
wdAlignPageNumberLeft, FirstPage:=True
.Application.Selection.MoveLeft Unit:=wdCharacter, Count:=39
.Application.Selection.MoveUp Unit:=wdLine, Count:=1
.Application.Selection.TypeText "Ejemplo de prueba"


'intro
.Application.Selection.TypeParagraph
.Application.Selection.TypeParagraph
.Application.Selection.TypeParagraph

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

También necesitaria para el pie del documento a la derecha y a la izquierda.
GRACIAS!!!
  #2 (permalink)  
Antiguo 01/04/2008, 09:38
 
Fecha de Ingreso: marzo-2008
Mensajes: 35
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Mediante V.B 6.0 introducir en el encabezado de un Word texto

Una idea... Aunque no he hecho nunca lo que preguntas, (el establecer una cabecera y un pie de página de un documento desde VB), sí que te puede dar alguna idea de los pasos que podrías tomar, haciendo una macro desde el Word.

Esto es: Realizas los pasos mientras grabas una macro, y luego miras el código resultante de la macro grabada.

En pasos:
Herramientas --> Macro --> Grabar nueva macro...
Realizas lo que deseas implementar con tu aplicación (p. ej.: Ver --> Encabezado y pie de página; incluir un texto con tabulaciones, y modificar la alineación de las tabulaciones del formato del párrafo; además de añadir el texto)
Detienes la grabación de la macro, y examinas el código Herramientas --> Macro --> Editor de Visual Basic...

El código resultante de las macros que generes no será exactamente el que vayas a utilizar, pero con un par de pruebillas seguro que lo sacas...

Saludos, Foxi.
  #3 (permalink)  
Antiguo 02/04/2008, 02:24
 
Fecha de Ingreso: octubre-2007
Mensajes: 36
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Mediante V.B 6.0 introducir en el encabezado de un Word texto

Gracias Foxi!!!
Hice lo que me dijiste pero la verdad es que sigo bastante liado.
El código resultante de la macro es el siguiente (utilizando office 2007) para poner un encabezado a la izquierda:

Sub Macro2()
'
' Macro2 Macro
'
'
If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
ActiveWindow.Panes(2).Close
End If
If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
ActivePane.View.Type = wdOutlineView Then
ActiveWindow.ActivePane.View.Type = wdPrintView
End If
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
ActiveDocument.AttachedTemplate.BuildingBlockEntri es(" En blanco").Insert _
Where:=Selection.Range, RichText:=True
Selection.TypeText Text:="Nº Página"
Selection.TypeParagraph
Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
Selection.MoveUp Unit:=wdLine, Count:=1
End Sub

ActiveWindow es un comando del propio visual del Word asi q no me vale de mucho... alguien sabe como se podría hacer para pasar esto a visual basic 6.0??
  #4 (permalink)  
Antiguo 02/04/2008, 06:56
 
Fecha de Ingreso: marzo-2008
Mensajes: 35
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Mediante V.B 6.0 introducir en el encabezado de un Word texto

Tienes la pista delante de tus ojos...

Dentro de tu código "With Documento" podrás poner ".ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader" (línea que he sacado de tu macro)... Lo cual habilita el encabezado de tu documento...
A partir de ahí es ir añadiéndole cosillas..

Un consejo: Si no estás acostumbrad@ al código de las macros de Word, te aconsejo que crees macros muy pequeñitas, para que el resultado sea exáctamente lo que tú deseas.

Saludos, Foxi.
  #5 (permalink)  
Antiguo 02/04/2008, 09:11
 
Fecha de Ingreso: octubre-2007
Mensajes: 36
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Mediante V.B 6.0 introducir en el encabezado de un Word texto

Hola Foxi!!!

He añadido esta parte del código, y me da un error de que falla el comando... no se si puede ser por que hay que añadir alguna librería, pero me da que el problema está en el "activewindow".

Teniendo en cuenta que mi código hace que se abra y se muestren los datos en el word en el form load puede que eso de problemas... no lo se!!!

La parte de código por lo pronto me queda así: (aquì hago que funcione con un buttom en vez del form_load)

Private Sub Command1_Click()
Dim Documento As New Word.Application

With Documento
'abre un documento
.Application.Documents.Open App.Path & "\ejemplo.doc"


'final del documento
.Application.Selection.EndKey wdStory
'intro
.Application.Selection.TypeParagraph
'introduccion de texto



'Activar el encabezado
.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
'Alinear el texto a la derecha en el encabezado
.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight

.Application.Selection.TypeText "Nº Cuestionario:" + vbNewLine + "Nº Página:"
.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
'intro
.Application.Selection.TypeParagraph
.Application.Selection.TypeParagraph
.Application.Selection.TypeParagraph
'crear tabla
.Documents.Item(1).Tables.Add Documento.Application.Selection.Range, 3, 5

Documento.Selection.Tables(1).Cell(1, 1).Borders(wdBorderTop).Visible = True
Documento.Selection.Tables(1).Cell(1, 1).Borders(wdBorderLeft).Visible = True
Documento.Selection.Tables(1).Cell(1, 1).Borders(wdBorderBottom).Visible = True
Documento.Selection.Tables(1).Cell(1, 1).Borders(wdBorderRight).Visible = True
Documento.Selection.Tables(1).Cell(1, 2).Borders(wdBorderTop).Visible = True
Documento.Selection.Tables(1).Cell(1, 2).Borders(wdBorderLeft).Visible = True
Documento.Selection.Tables(1).Cell(1, 2).Borders(wdBorderBottom).Visible = True
Documento.Selection.Tables(1).Cell(1, 2).Borders(wdBorderRight).Visible = True
Documento.Selection.Tables(1).Cell(2, 1).Borders(wdBorderTop).Visible = True
Documento.Selection.Tables(1).Cell(2, 1).Borders(wdBorderLeft).Visible = True
Documento.Selection.Tables(1).Cell(2, 1).Borders(wdBorderBottom).Visible = True
Documento.Selection.Tables(1).Cell(2, 1).Borders(wdBorderRight).Visible = True
Documento.Selection.Tables(1).Cell(2, 2).Borders(wdBorderTop).Visible = True
Documento.Selection.Tables(1).Cell(2, 2).Borders(wdBorderLeft).Visible = True
Documento.Selection.Tables(1).Cell(2, 2).Borders(wdBorderBottom).Visible = True
Documento.Selection.Tables(1).Cell(2, 2).Borders(wdBorderRight).Visible = True


'relleno de tabla
.Documents.Item(1).Tables(1).Cell(1, 1).Range.Text = "Nº Cuestionario"
.Documents.Item(1).Tables(1).Cell(2, 1).Range.Text = "Nº Página"
.Documents.Item(1).Tables(1).Cell(1, 2).Range.Text = numinicio
.Documents.Item(1).Tables(1).Cell(2, 2).Range.Text = numpaginas

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

Como puedes ver intento pasarlo bien poniendolo como campos de texto y bien probando a pasr los datos en una tabla (esta solución me interesa más).

Así que dos preguntas:
1- Como podría alinear la tabla a un lado u otro del documento??
2- Necesito agregar alguna librería para la parte de código de el encabezado???
  #6 (permalink)  
Antiguo 02/04/2008, 09:39
 
Fecha de Ingreso: marzo-2008
Mensajes: 35
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Mediante V.B 6.0 introducir en el encabezado de un Word texto

A ver...
Vamos por partes:
A tu pregunta: "2- Necesito agregar alguna librería para la parte de código de el encabezado???"
Yo me creo un proyecto nuevo, y para ejecutar tu código hago lo siguiente:
- Copio el código del command en el Load del formulario.
- Agrego la referencia "Microsoft Word 11.0 Object Lybrary"
- Corrijo las variables numinicio y numpaginas que las tendrás posiblemente en algún textbox..
- Y ejecuto... Me da un error en la parte de relleno de tabla: (que en vez de ".Documents.Item(1).Tables(1)...." lo corrijo por "Documento.Selection.Tables(1)...")... y sin problemas.

Supongo que habrá algo diferente, por lo que no sé si te estoy ayudando... Si consigues hacer eso, vuelve a intentar lo de la macro en Word...

Foxi.
  #7 (permalink)  
Antiguo 02/04/2008, 10:22
 
Fecha de Ingreso: octubre-2007
Mensajes: 36
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Mediante V.B 6.0 introducir en el encabezado de un Word texto

Hola Foxi!!! He probado a hacer lo que dices y me sigue dando problemas la línea de código del encabezado.
La librería q he agragado es la de Micrsoft Word 12.0 no la 11.0 (esqa no me aparece) puede q sea por eso...
Las variables de numinicio,numfinal... las coge de unos textbox pero no me dan problemas.

Ati te lo a puesto bien en el encabezado???

Siento darte el coñazo
  #8 (permalink)  
Antiguo 02/04/2008, 10:32
 
Fecha de Ingreso: marzo-2008
Mensajes: 35
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Mediante V.B 6.0 introducir en el encabezado de un Word texto

Bueno, puede que yo tenga instalado algo más en el ordenata, que me permite ejecutar ese comando... Prueba a anular lo de ActivePane. Así:
".ActiveWindow.View.SeekView = wdSeekCurrentPageHeader"

¡A ver qué tal!

Foxi.
  #9 (permalink)  
Antiguo 02/04/2008, 10:54
 
Fecha de Ingreso: octubre-2007
Mensajes: 36
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Mediante V.B 6.0 introducir en el encabezado de un Word texto

Sigue diciendo q falla el comando...
  #10 (permalink)  
Antiguo 02/04/2008, 11:17
 
Fecha de Ingreso: octubre-2007
Mensajes: 36
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Mediante V.B 6.0 introducir en el encabezado de un Word texto

Ya he solucionado el problema, gracias Foxi!!!
Ahora lo bueno sería saber como alinear una tabla entera con sus bordes y todo a ambos lados del encabezado o pie de pagina...
  #11 (permalink)  
Antiguo 02/04/2008, 11:21
 
Fecha de Ingreso: marzo-2008
Mensajes: 35
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Mediante V.B 6.0 introducir en el encabezado de un Word texto

Pues sí que me lo pones difícil...

A mí me va de vicio:

Olvidando la alineación, (sólo para insertar texto en el encabezado), prueba esto:
Documento.Selection.Sections(1).Headers(wdHeaderFo oterEvenPages).Range.Text = "Prueba"

¿Exáctamente dónde te falla el comando?

Foxi.
  #12 (permalink)  
Antiguo 02/04/2008, 11:33
 
Fecha de Ingreso: marzo-2008
Mensajes: 35
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Mediante V.B 6.0 introducir en el encabezado de un Word texto

Bueno, me he confundido un poquito, el código más apropiado sería:
Documento.Selection.Sections(1).Headers(wdHeaderFo oterPrimary).Range.Text = "Prueba"

Y el de alinación de la cabecera sería:

Documento.Selection.Sections(1).Headers(wdHeaderFo oterPrimary).Range.ParagraphFormat.Alignment = XX

pudiendo ser XX:
- wdAlignParagraphLeft
- wdAlignParagraphRight
- wdAlignParagraphCenter
- y algún otro...

Mañana miro a ver qué tal te ha ido...
  #13 (permalink)  
Antiguo 03/04/2008, 00:15
 
Fecha de Ingreso: marzo-2008
Mensajes: 35
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Mediante V.B 6.0 introducir en el encabezado de un Word texto

Ups! En los dos últimos mensajes no me había dado cuenta de tu último mensaje... Ese que decía que ya lo tenías solucionado: ¿Cómo? ¿Te faltaba algo? ¿Con otra instrucción? Ya que si lo has solucionado para que te funcione con la que te salió de la macro, ya puedes sacar cómo hacer practicamente todo lo que se te ocurra, haciéndolo previamente en el Word y generando macros...

Foxi.
  #14 (permalink)  
Antiguo 03/04/2008, 01:11
 
Fecha de Ingreso: octubre-2007
Mensajes: 36
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Mediante V.B 6.0 introducir en el encabezado de un Word texto

Hola Foxi!!! Lo q ocurría es que tenemos el office 2007 y a la hora de abrir te da 3 opciones de como quieres abrir el documento. El caso es q yo le daba a una opción que me lo bloqueaba esa parte del código. Tenía que abrirlo en modo copia o algo así... el caso es q ya funciona!!!

Gracias!!!
  #15 (permalink)  
Antiguo 03/04/2008, 02:13
 
Fecha de Ingreso: octubre-2007
Mensajes: 36
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Mediante V.B 6.0 introducir en el encabezado de un Word texto

Aunque lo de alinear la tabla entera hacia un lado u otro sigue sin tirarme...
El código me queda así:

Dim Documento As New Word.Application

With Documento
'abre un documento
.Application.Documents.Open App.Path & "\Plan.doc"

'final del documento
.Application.Selection.EndKey wdStory

'Activar el encabezado
.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
'Para que en todos los encabezados sea igual
With ActiveDocument.PageSetup
.LineNumbering.Active = False
.Orientation = wdOrientPortrait
.TopMargin = CentimetersToPoints(0.95)
.BottomMargin = CentimetersToPoints(1.27)
.LeftMargin = CentimetersToPoints(1.59)
.RightMargin = CentimetersToPoints(1.63)
.Gutter = CentimetersToPoints(0)
.HeaderDistance = CentimetersToPoints(1)
.FooterDistance = CentimetersToPoints(0.78)
.PageWidth = CentimetersToPoints(21)
.PageHeight = CentimetersToPoints(29.7)
.FirstPageTray = wdPrinterDefaultBin
.OtherPagesTray = wdPrinterDefaultBin
.SectionStart = wdSectionNewPage
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.VerticalAlignment = wdAlignVerticalTop
.SuppressEndnotes = False
.MirrorMargins = False
.TwoPagesOnOne = False
.BookFoldPrinting = False
.BookFoldRevPrinting = False
.BookFoldPrintingSheets = 1
.GutterPos = wdGutterPosLeft
End With
'Alinear el texto a la derecha en el encabezado
.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
Documento.Selection.Sections(1).Headers(wdHeaderFo oterPrimary).Range.ParagraphFormat.Alignment = wdAlignParagraphRight


'intro

'crear tabla
.Documents.Item(1).Tables.Add Documento.Application.Selection.Range, 3, 3

Documento.Selection.Tables(1).Cell(1, 1).Borders(wdBorderTop).Visible = True
Documento.Selection.Tables(1).Cell(1, 1).Borders(wdBorderLeft).Visible = True
Documento.Selection.Tables(1).Cell(1, 1).Borders(wdBorderBottom).Visible = True
Documento.Selection.Tables(1).Cell(1, 1).Borders(wdBorderRight).Visible = True
Documento.Selection.Tables(1).Cell(1, 2).Borders(wdBorderTop).Visible = True
Documento.Selection.Tables(1).Cell(1, 2).Borders(wdBorderLeft).Visible = True
Documento.Selection.Tables(1).Cell(1, 2).Borders(wdBorderBottom).Visible = True
Documento.Selection.Tables(1).Cell(1, 2).Borders(wdBorderRight).Visible = True
Documento.Selection.Tables(1).Cell(2, 1).Borders(wdBorderTop).Visible = True
Documento.Selection.Tables(1).Cell(2, 1).Borders(wdBorderLeft).Visible = True
Documento.Selection.Tables(1).Cell(2, 1).Borders(wdBorderBottom).Visible = True
Documento.Selection.Tables(1).Cell(2, 1).Borders(wdBorderRight).Visible = True
Documento.Selection.Tables(1).Cell(2, 2).Borders(wdBorderTop).Visible = True
Documento.Selection.Tables(1).Cell(2, 2).Borders(wdBorderLeft).Visible = True
Documento.Selection.Tables(1).Cell(2, 2).Borders(wdBorderBottom).Visible = True
Documento.Selection.Tables(1).Cell(2, 2).Borders(wdBorderRight).Visible = True


'relleno de tabla
Documento.Selection.Tables(1).Cell(1, 1).Range.Text = "Cuestionario"
Documento.Selection.Sections(1).Headers(wdHeaderFo oterPrimary).Range.ParagraphFormat.Alignment = wdAlignParagraphRight
Documento.Selection.Tables(1).Cell(2, 1).Range.Text = "Nº Página"
Documento.Selection.Sections(1).Headers(wdHeaderFo oterPrimary).Range.ParagraphFormat.Alignment = wdAlignParagraphRight
Documento.Selection.Tables(1).Cell(1, 2).Range.Text = numinicio
Documento.Selection.Sections(1).Headers(wdHeaderFo oterPrimary).Range.ParagraphFormat.Alignment = wdAlignParagraphRight
Documento.Selection.Tables(1).Cell(2, 2).Range.Text = numpaginas
Documento.Selection.Sections(1).Headers(wdHeaderFo oterPrimary).Range.ParagraphFormat.Alignment = wdAlignParagraphRight

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

Como ves e puesto esa línea de código q me dijiste pero no me mueve la tabla
???????
  #16 (permalink)  
Antiguo 03/04/2008, 03:29
 
Fecha de Ingreso: marzo-2008
Mensajes: 35
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Mediante V.B 6.0 introducir en el encabezado de un Word texto

Vamos por partes:

- Tienes razón, lo que pasa es que ese código era para alinear toda la cabecera con otro método, (Cuando pensaba que todavía no habías solucionado lo de escribir en la cabecera)... Ignóralo...

- Para cambiar la alineación a la derecha de cualquier objeto seleccionado del documento puedes usar el comando:
Documento.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
para lo cual, antes debes de seleccionarlo (p.ej.: la tabla: Documento.Selection.Tables(1).Select).

- De todas formas al crear una tabla de x celdas horizontales, te ajusta el ancho de las celdas para que el ancho de la tabla sea el mismo que el de la hoja. Por lo que al crear una tabla de 3 columnas, aunque sólo resaltes los bordes de las dos primeras columnas, existirán las tres columnas. Por lo que se me ocurre que igual quieres rellenar las dos últimas columnas, (no empezar en la primera).

- Aún así: Si lo que querías era poner el texto sin tablas, yo lo habría hecho con tabulaciones, p. ej.:
Después de activar el encabezado y definir sus propiedades como ya lo tienes:
' Lo dejas alineado a la Izquierda:
Documento.Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
' Se eliminan las tabulaciones que hayan por defecto:
Documento.Selection.ParagraphFormat.TabStops.Clear All
' Se añade una tabulación justificada a la derecha en una posición determinada (por ejemplo a 17 centímetros):
Documento.Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(17), Alignment:=wdAlignTabRight, Leader:=wdTabLeaderSpaces
' Escribes lo de la izquierda, y lo de la derecha separado de un tabulador:
Documento.Selection.TypeText Text:="Cuestionario " & numinicio & vbTab & "Nº Páginas: " &
numpaginas

- Si no te vale nada de esto: Reitero mi consejo de que lo hagas directamente en Word mientras grabas macros, para así poder ver el código que te va a hacer falta en tu aplicación.

Foxi.
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 17:10.