Buscar palabras consecutivas en word
Publicado por Alfonso (2 intervenciones) el 24/11/2021 20:15:14
En un documento Word quiero remarcar todos los verbos compuestos, por ejemplo, los presentes perfectos de tercera persona (tipo "ha bebido")
He creado una macro que me funciona a la perfección. Con el único problema que al aumentar el número de palabras del documento, el tiempo se alarga exponencialmente, siendo inmanejable.
En mi rudimentario conocimiento de VB aplicado a Word, no logro encontrar la solución.
¿Quién se atreve a ayudarme? Le quedaría enormemente agradecido.
Adjunto el código actual:
Sub Verbos_Compuestos()
Application.ScreenUpdating = False
'Ejemplo: Ha comido, ha visto, ha dicho, ha impreso
'-> Lista primera palabra: Ha, ha (para tercera persona de singular)
'-> Lista de terminaciones de participios: to, do, so (idem)
Dim texto1, texto2 As String
Dim TargetList
Dim Encontrado As Integer
Encontrado = 0
TargetList = Array("do", "to", "ho", "so")
palabras = ActiveDocument.Words.Count
For i = 1 To palabras
texto1 = RTrim(ActiveDocument.Words(i).Text)
If texto1 = "ha" Or texto1 = "Ha" Then
texto2 = Right(RTrim(ActiveDocument.Words(i + 1).Text), 2)
For j = 0 To UBound(TargetList)
If texto2 = TargetList(j) Then
ActiveDocument.Words(i).HighlightColorIndex = wdPink
ActiveDocument.Words(i + 1).HighlightColorIndex = wdRed
Encontrado = Encontrado + 1
Exit For
End If
Next
End If
If Int(i / 5000) = i / 5000 Then
If MsgBox(i & " analizadas. ¿Continuar?" & " Total " & palabras, vbYesNo) = vbNo Then Exit For
End If
Next
System.Cursor = wdCursorNormal
MsgBox ("He encontrado" & Encontrado & "casos")
End Sub
He creado una macro que me funciona a la perfección. Con el único problema que al aumentar el número de palabras del documento, el tiempo se alarga exponencialmente, siendo inmanejable.
En mi rudimentario conocimiento de VB aplicado a Word, no logro encontrar la solución.
¿Quién se atreve a ayudarme? Le quedaría enormemente agradecido.
Adjunto el código actual:
Sub Verbos_Compuestos()
Application.ScreenUpdating = False
'Ejemplo: Ha comido, ha visto, ha dicho, ha impreso
'-> Lista primera palabra: Ha, ha (para tercera persona de singular)
'-> Lista de terminaciones de participios: to, do, so (idem)
Dim texto1, texto2 As String
Dim TargetList
Dim Encontrado As Integer
Encontrado = 0
TargetList = Array("do", "to", "ho", "so")
palabras = ActiveDocument.Words.Count
For i = 1 To palabras
texto1 = RTrim(ActiveDocument.Words(i).Text)
If texto1 = "ha" Or texto1 = "Ha" Then
texto2 = Right(RTrim(ActiveDocument.Words(i + 1).Text), 2)
For j = 0 To UBound(TargetList)
If texto2 = TargetList(j) Then
ActiveDocument.Words(i).HighlightColorIndex = wdPink
ActiveDocument.Words(i + 1).HighlightColorIndex = wdRed
Encontrado = Encontrado + 1
Exit For
End If
Next
End If
If Int(i / 5000) = i / 5000 Then
If MsgBox(i & " analizadas. ¿Continuar?" & " Total " & palabras, vbYesNo) = vbNo Then Exit For
End If
Next
System.Cursor = wdCursorNormal
MsgBox ("He encontrado" & Encontrado & "casos")
End Sub
Valora esta pregunta
0