Guardar el documento con un nombre encontrado en este doc.

philoche63 Mensajes publicados 15 Estado Membre -  
C-Claire Mensajes publicados 4562 Fecha de registro   Estado Membre Última intervención   -
Hola,
Otro problema con una macro:
Con la valiosa ayuda de C-Claire tengo una macro que me permite dividir un archivo word según los saltos de página. Aquí está esta macro:

Sub BreakOnPage()
' Usado para establecer criterios para mover a través del documento por página.
Application.Browser.Target = wdBrowsePage

For i = 1 To ActiveDocument.BuiltInDocumentProperties("Number of Pages")

'Selecciona y copia el texto al portapapeles.
ActiveDocument.Bookmarks("\page").Range.Copy

' Abre un nuevo documento para pegar el contenido del portapapeles.
Documents.Add
ligne = Cells(4, 4)
Selection.Paste
' Elimina el salto que se copia al final de la página, si existe.
Selection.TypeBackspace
ChangeFileOpenDirectory "F:\PDF CREATOR\"
DocNum = DocNum + 1
ActiveDocument.SaveAs FileName:="test_" & DocNum & ".doc"
ActiveDocument.Close

' Mueve la selección a la siguiente página en el documento.
Application.Browser.Next
Next i
ActiveDocument.Close savechanges:=wdDoNotSaveChanges
End Sub



Ahora, me gustaría que el archivo Word generado lleve el nombre de la persona que encuentro en la línea 26 del documento. Esta línea se presenta así:
"Artículo 1: La situación de la señora Francois MARTIN, "

¿cómo puedo hacer para que mi documento se guarde bajo la forma "MARTIN Francois"?

¿Es posible en VBA Word?

¡Muchas gracias de antemano por tu ayuda!
¡Excelente día!

Philippe

Configuración: Windows 7 / Internet Explorer 10.0

4 réponses

philoche63 Mensajes publicados 15 Estado Membre
 
Gracias por tu respuesta, pero aparentemente no funciona porque estoy trabajando en el resultado de la fusión y por lo tanto ya no tengo mis campos de fusión.

He utilizado el grabador de macros, he visto el código generado, pero ¿cómo hago cuando estoy en la línea donde se encuentra el nombre y el apellido para indicar que el apellido está entre el séptimo y el octavo espacio y que el nombre se encuentra entre el octavo y el noveno espacio?

Una vez más, gracias por tu ayuda.
0
C-Claire Mensajes publicados 4562 Fecha de registro   Estado Membre Última intervención   2 250
 
Tienes razón, olvidé que la fusión había terminado.

Puedes usar la siguiente instrucción que selecciona la 8ª palabra de la línea y la copia
Selection.MoveRight Unit:=wdWord, Count:=7, Extend:=wdExtend
Selection.Copy
Modificas el valor Count para la siguiente palabra.

Otras opciones probablemente mejores: usar marcadores en tu documento tipo para que el nombre y el apellido estén identificados y puedas referenciarte a ellos en el resultado de la fusión y, por lo tanto, en la instrucción SaveAs o utilizar las propiedades del documento y colocar el nombre y el apellido allí.

C-Claire
0
philoche63 Mensajes publicados 15 Estado Membre > C-Claire Mensajes publicados 4562 Fecha de registro   Estado Membre Última intervención  
 
Siendo completamente nulo en macros, ¡todavía necesito de tus luces!
¿Cómo puedo hacer que entienda que quiero poner la séptima palabra en una variable 'NomAgent'?

Hemos utilizado el grabador de macros para llegar a la línea donde se encuentra el nombre de la persona (son las líneas que comienzan con Selection.
Aquí está el código:
Sub BreakOnPage()
' Usado para establecer criterios para moverse por el documento página por página.
Application.Browser.Target = wdBrowsePage

For i = 1 To ActiveDocument.BuiltInDocumentProperties("Number of Pages")

'Seleccionar y copiar el texto en el portapapeles.
ActiveDocument.Bookmarks("\page").Range.Copy

' Abrir un nuevo documento para pegar el contenido del portapapeles.
Documents.Add
Selection.PasteAndFormat (wdFormatOriginalFormatting)
' Elimina el salto que se copia al final de la página, si lo hay.
Selection.MoveDown Unit:=wdLine, Count:=25
Selection.MoveRight Unit:=wdCharacter, Count:=23
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdCharacter, Count:=16, Extend:=wdExtend
Selection.Copy
Selection.TypeBackspace
ChangeFileOpenDirectory "F:\PDF CREATOR\"
DocNum = DocNum + 1
ActiveDocument.SaveAs FileName:="test_" & DocNum & ".doc"
ActiveDocument.Close

' Mover la selección a la siguiente página en el documento.
Application.Browser.Next
Next i
ActiveDocument.Close savechanges:=wdDoNotSaveChanges
End Sub


En cuanto a los marcadores, no creo mucho en ello ya que el documento de combinación es gestionado por nuestro software de nómina para la generación de este mail merge, pero me informaré para la próxima vez.

Muchas gracias por tu ayuda.

¡A+!
0
C-Claire Mensajes publicados 4562 Fecha de registro   Estado Membre Última intervención   2 250 > philoche63 Mensajes publicados 15 Estado Membre
 
Vamos a hacer algo más limpio y más corto utilizando la posición de la palabra en lugar de su selección mediante el cursor.
Dijiste que la persona está en la 26ª línea. Si tus líneas son párrafos, entonces indicas correctamente (26) en la instrucción a continuación. Si son líneas, cuenta los párrafos.

Prenom = ActiveDocument.Paragraphs(26).Range.Words(8)
Nom = ActiveDocument.Paragraphs(26).Range.Words(9)
ActiveDocument.SaveAs FileName:= Nom & " " & Prenom & ".docx"

Las 2 primeras instrucciones memorizan el nombre y el apellido.

C-Claire
0
philoche63 Mensajes publicados 15 Estado Membre > C-Claire Mensajes publicados 4562 Fecha de registro   Estado Membre Última intervención  
 
Es cierto que esta solución es más simple (de hecho, casi lo entendí todo ;-) )
Pero esta vez se bloquea y tengo el mensaje:
"el miembro de la colección requerido no existe"
¿Qué dices?
gracias por tu ayuda
¡hasta luego!
0
C-Claire Mensajes publicados 4562 Fecha de registro   Estado Membre Última intervención   2 250 > philoche63 Mensajes publicados 15 Estado Membre
 
Lo siento, como estoy en varios asuntos fuera del foro, lo hice rápido.
Es necesario declarar las variables. Debajo de la "Sub" añade
Dim Prenom
Dim Nom

C-Claire
0
philoche63 Mensajes publicados 15 Estado Membre
 
¡Con su ayuda, estoy muy cerca del objetivo!
He vuelto a contar los párrafos y la línea donde se encuentra el nombre de la persona está en la línea 21.
Por primera vez, la macro guarda con el nombre de la persona, pero no en el archivo dividido, sino en la combinación de correspondencia.

Le vuelvo a dar el código porque, siendo novato, no lo he puesto en el lugar correcto.

Sub BreakOnPage()
' Utilizado para establecer criterios para moverse a través del documento por página.
Application.Browser.Target = wdBrowsePage

For i = 1 To ActiveDocument.BuiltInDocumentProperties("Number of Pages")

'Selecciona y copia el texto al portapapeles.
ActiveDocument.Bookmarks("\page").Range.Copy

' Abre un nuevo documento para pegar el contenido del portapapeles.
Documents.Add
Selection.PasteAndFormat (wdFormatOriginalFormatting)
' Elimina el salto que se copia al final de la página, si hay alguno.
Selection.TypeBackspace
ChangeFileOpenDirectory "F:\PDF CREATOR\"
'DocNum = DocNum + 1
Prenom = ActiveDocument.Paragraphs(21).Range.Words(7)
Nom = ActiveDocument.Paragraphs(21).Range.Words(8)
ActiveDocument.SaveAs FileName:=Nom & " " & Prenom & ".doc"

' ActiveDocument.SaveAs FileName:="test_" & DocNum & ".doc"
ActiveDocument.Close

' Mueve la selección a la siguiente página en el documento.
Application.Browser.Next
Next i
ActiveDocument.Close savechanges:=wdDoNotSaveChanges
End Sub



¡Un gran agradecimiento por su ayuda y su paciencia!
¡Hasta luego!
Philippe
0
philoche63 Mensajes publicados 15 Estado Membre
 
¡No busquen más, está bien!
¡UN GRAN GRAN GRACIAS por su ayuda!
¡Hasta luego!
Philippe
0
C-Claire Mensajes publicados 4562 Fecha de registro   Estado Membre Última intervención   2 250
 
Yo, ya no buscaba... esperaba que tú encontraras y nos dieras la respuesta ;-)

C-Claire, curiosa...
0
C-Claire Mensajes publicados 4562 Fecha de registro   Estado Membre Última intervención   2 250
 
Hola Philippe y gracias, pero solo te he enviado a Microsoft :-)

Si el nombre y el apellido de la persona están en 2 campos de combinación, deberías poder recuperar su valor usando .DataFields.

Esto podría dar algo como:

Prenom = ActiveDocument.MailMerge.DataSource.DataFields(1).Value
Nom = ActiveDocument.MailMerge.DataSource.DataFields(2).Value

ActiveDocument.SaveAs FileName:=Nom & " " & Prenom & ".doc"

(1) y (2) son los números de orden de los campos en tu archivo de datos.
Si estás en Word 2007 o posterior, puedes guardar en formato .docx.

No soy una experta en VBA. Seguramente habrá otras sugerencias.

--
C-Claire
-1