Macro VBA Repetir acción hasta alcanzar el final del documento
Apprenti-InformatiChien -
Hello,
How to repeat the following macro in a loop with the stop condition reached end of document? I don’t master the Loop Until function well. Here is my code :
Sub NotesdeFin_MiseEnForme()
'
' NotesdeFin_MiseEnForme Macro
' Add brackets around endnote list number
'
Selection.TypeText Text:="["
Selection.MoveRight Unit:=wdWord, Count:=1
Selection.TypeText Text:="]"
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.TypeText Text:=" "
Selection.MoveDown Unit:=wdParagraph, Count:=1
Loop Until
End Sub
Result, this formatting :
61. Voir note
is reformatted as follows with brackets around the number :
[62]. Mozart, Briefe..., op. cit., lettre du 18 janvier 1775 : I, p. 517 (I, p. 368).
Thanks in advance for your help !
JulienDébutant
- Filtrar fecha por macro VBA - problema de formato
- [Excel vba] Problema de asignación de macro -> objeto
- Macro para ocultar fila en Excel.
- Selección de VBA hasta la última celda llena
- [excel vba] Problema al asignar una macro a un botón
- La tecla F8 no funciona para depurar la macro de VBA paso a paso.
4 respuestas
-
día
Código para probar
Sub NotesdeFin_MiseEnForme()' 'Notas de Fin_MiseEnForme Macro ' Añadir corchetes alrededor del número de la lista de notas al final del documento ' Dim doc As Document Set doc = ActiveDocument ' Colocar el cursor al inicio del documento Selection.HomeKey Unit:=wdStory ' Bucle hasta el final del documento Do Until Selection.End = doc.Content.End Selection.TypeText Text:="[" Selection.MoveRight Unit:=wdWord, Count:=1 Selection.TypeText Text:="]" Selection.MoveRight Unit:=wdCharacter, Count:=1 Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend Selection.TypeText Text:=" " Selection.MoveDown Unit:=wdParagraph, Count:=1 Loop End Sub
-
Hola,
Gracias por su respuesta, lamentablemente el código propuesto no sirve porque el bucle nunca termina, lo que luego provoca que Word se bloquee. Aún no sé qué instrucción indicar para detener el bucle.
-
código para probar de nuevo
Sub NotesdeFin_MiseEnForme() ' NotesdeFin_MiseEnForme Macro ' Añadir corchetes alrededor del número de la lista de notas al final Dim doc As Document Dim rng As Range Set doc = ActiveDocument Set rng = doc.Content ' Desactivar la actualización de la pantalla y las notificaciones para mejorar el rendimiento Application.ScreenUpdating = False Application.DisplayAlerts = False ' Bucle a través de cada palabra del documento For i = 1 To rng.Words.Count If IsNumeric(rng.Words(i).Text) Then ' Añadir corchetes alrededor de la palabra rng.Words(i).Text = "[" & rng.Words(i).Text & "]" End If Next i ' Reactivar la actualización de la pantalla y las notificaciones Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
-
< p>Muchas gracias por su respuesta.
El código propuesto ahora en realidad crea dos corchetes alrededor de cada número, pero también alrededor de los números que pueden aparecer en la nota:
[[1]]. Esto es verdad en [[1975]].
Creo que por el momento voy a mantener mi primera macro creando un atajo para usarla rápidamente.
No tengo aún las habilidades necesarias para crear un código que me convenga. Sigo estudiando.
¡Gracias de nuevo por su ayuda!