Подстановочные знаки MS Word VBA Макрос поиска текста внутри двойного фигурного в. DOC файлов - PullRequest
0 голосов
/ 11 сентября 2011

Пожалуйста, помогите !!!

У меня есть макрос VBA для Microsoft Word, который я пытаюсь исправить.Цель макроса - сопоставить совпадения со всем, что находится внутри двойных фигурных скобок {{что угодно}}, однако фигурные скобки должны быть открыты и закрыты в одной строке.После того, как у меня совпадение, мне нужно иметь возможность применить изменения формата, стиля, цвета и т. Д. И применить некоторые другие изменения выбранного текста.

.Док, в котором мне нужно искать, содержит таблицы, рисовать текстовое поле и другиеобъекты, поэтому я хотел бы использовать обычный поиск по слову MS.

Пример:

{{1,000.00}}        match (1)
{{Interesting}}     match (1)
{{Within}}          match (1)
{{1’100.00’}}       match (1)
**{{01A10}}    {{01A10}}**   match (2) twice
 {{      1    }}    match (1)
{{10-}}          {{-10}}      match (2) twice
[[1252}}            No match (0)
{{8888888.99        No match (0), because close curly braces are in a new line
}}
{{}}                match (1)
{{1’000’000.05}}    match (1)
{{                  No match (0)
}}                  No match (0)

Я пробовал это "[{] {2} <*> [}] {2} "но это не работает, это приводит к нежелательному результату.любая помощь будет очень признателен.

Прокат это мой код:

Sub GetTotalReport()
    Dim totalReport As Double
    Dim placeHolderRep As Variant
    Dim placeHolder As Variant

    ActiveDocument.Select

    totalReport = 0#
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "[\{]{2}<*>[\}]{2}"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
          Do While .Execute
            With Selection
              .Font.Italic = True
              .Font.Bold = True
                If Not .Text = "" Then
                  placeHolderRep = Mid(.Text, 3, Len(.Text) - 4)
                 .Text = placeHolderRep
                  placeHolder = placeHolderRep
                  placeHolder = Replace(Replace(Replace(placeHolder, ",", ""), "'", ""), "’", "")
                  totalReport = totalReport + Val(placeHolder)
                End If
            End With
        Loop
    End With
End Sub

1 Ответ

1 голос
/ 11 сентября 2011

Как насчет:

Selection.WholeStory

Set re = CreateObject("vbscript.regexp")

p = "\{\{[^\{]*\}\}"
ary = Split(Selection, vbCr)

re.Global = True
re.Pattern = p

For i = 0 To UBound(ary)
    Set Matches = re.Execute(ary(i))
    Debug.Print ary(i) & ": " & Matches.Count
Next

См .: http://msdn.microsoft.com/en-us/library/ms974570.aspx

...