Тема: Автоматизація Microsoft Word з VBA
Якось мені одна знайома розказувала що вона робить на роботі, і я вжахнувся, половину її роботи повинні робити роботи. Наприклад треба знайти в документі всі слова Nestle, і замінити на Nestlé, при цьому жирним і курсивом. Nestlé також зробити жирним і курсивом. Слово Maggi і деякі інші - просто курсивом.
Я щось нагуглив і вийшло так:
Option Explicit
Sub FormatNestle()
   Selection.Find.ClearFormatting
   Selection.Find.Replacement.ClearFormatting
   With Selection.Find
        .Text = "Nestle"
        .Replacement.Text = "Nestl" + ChrW(&HE9)
        .Replacement.Font.Bold = True
        .Replacement.Font.Italic = True
        .Forward = True
        .Wrap = wdFindContinue
        .MatchWholeWord = True
   End With
   Selection.Find.Execute Replace:=wdReplaceAll
   
   Selection.Find.ClearFormatting
   Selection.Find.Replacement.ClearFormatting
   With Selection.Find
        .Text = "Nestl" + ChrW(&HE9)
        .Replacement.Text = "Nestl" + ChrW(&HE9)
        .Replacement.Font.Bold = True
        .Replacement.Font.Italic = True
        .Forward = True
        .Wrap = wdFindContinue
        .MatchWholeWord = True
   End With
   Selection.Find.Execute Replace:=wdReplaceAll
   
   Selection.Find.ClearFormatting
   Selection.Find.Replacement.ClearFormatting
   With Selection.Find
        .Text = "Maggi"
        .Replacement.Text = "Maggi"
        .Replacement.Font.Italic = True
        .Forward = True
        .Wrap = wdFindContinue
        .MatchWholeWord = True
   End With
   Selection.Find.Execute Replace:=wdReplaceAll
End SubВоно більш-менші працює, але то страх і жах. Можна якось застосувати відокремленя методу хоча б? (для себе TODO: RTFM.)
Я подумав про регулярні вирази, знайшов таке:
Sub FormatNestleB()
  Dim regEx As regExp
  'Dim Match
  'Dim Matches
  Dim sel As Range
  Dim rngRange As Range
  Set regEx = New regExp
  regEx.Pattern = "Nestl[e" + ChrW(&HE9) + "]|Maggi"
  regEx.IgnoreCase = False
  regEx.Global = True
  Set Matches = regEx.Execute(ActiveDocument.Range.Text)
  For Each Match In Matches
     Set sel = ActiveDocument.Range(Match.FirstIndex, Match.FirstIndex + Len(Match.Value))
     sel.Bold = True
     sel.Italic = True
  Next
End SubАле воно не працює. 
Хто знає якусь нормальну книжку по VBA, або можливо інші способи автоматизації такого? Також корисно було б могти автоматизувати браузер, або робити http запити.
Комп’ютер корпоративний, там вінда, я з нею не дуже знайомий, тому не знаю чи ще щось там можна поставити.

 
 
 