Guardar el documento con un nombre encontrado en este doc.
philoche63
Mensajes publicados
15
Estado
Miembro
-
C-Claire Mensajes publicados 4562 Fecha de registro Estado Miembro Última intervención -
C-Claire Mensajes publicados 4562 Fecha de registro Estado Miembro Ú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
Enlaces relacionados:
- Problema de apertura de un documento Word con contraseña
- 2 orientaciones de página en un mismo documento de Word
- Cómo listar nombres propios de un documento de Word
- encontrar un archivo de Word con una palabra que aparece en el contenido?
- este documento ha sido objeto de demasiadas modificaciones
- impresión de comentarios en un documento Word
4 respuestas
-
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.-
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 -
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+! -
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 -
-
-
-
¡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 -
¡No busquen más, está bien!
¡UN GRAN GRAN GRACIAS por su ayuda!
¡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