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 -
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:
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
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
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.
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.
¡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.
¡Un gran agradecimiento por su ayuda y su paciencia!
¡Hasta luego!
Philippe
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
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
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
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
¿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:
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+!
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
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!
Es necesario declarar las variables. Debajo de la "Sub" añade
Dim Prenom
Dim Nom
C-Claire