Regulární výrazy (Regular Expressions) umožňují složitější záměnu textových řetězců. V MS Office nabízí rozšířené nahrazování textu MS Word. Bohužel řada uživatelů nemá o tomto nástroji ponětí a tak se uchyluje k prostému nahrazování "x" za "y" a zbytek dělá ručně. Doporučuji proto vyzkoušet volbu Úpravy / Nahradit, tlačítko Speciální. V nápovědě Wordu (zde 2003) pak hledejte výraz "Vyhledání a nahrazení textu nebo dalších položek" a zvláštní pozornost věnujte zástupným znakům.
Jak ale na inteligentní záměnu, pokud potřebujeme nahrazovat řetězce v jiném produktu MS Office než je Word, nebo dokonce mimo MS Office? Pro každý z případů existuje řešení. V případě prvním je možné prostřednictvím VBA přistoupit k objektu RegExp (součást WSH, resp. VBScriptu), v případě druhém zvolit externí aplikaci. Než se tak stane, je nutné se s tématem regulárních výrazů seznámit blíže - viz odkazy.
V praxi to funguje tak, že nejprve sestavíme masku, jinak řečeno filtr, vzorek, předlohu, šablonu (Pattern), podle které chceme řetězce vyhledávat. Dále je možné stanovit, jak prohledávat zdroj textu (Multiline a Global) a jak porovnávat velikost písmen (IgnoreCase). Navrácen pak může být pozměněný text (Replace) nebo odpověď typu "ano, něco jsem našel" a "ne, šabloně nic nevyhovuje" (Test), resp. kolekce nalezených výskytů (Execute, Match v kolekci Matches). Právě sestavení šablony představuje leckdy značný logický oříšek. Ale nemusíte zoufat, pro běžné požadavky je na internetu dostatek zdrojů.
Pozn. Uvědomte si, že základní formátování textu zprostředkovávají běžné znaky ASCII tabulky a patří sem i tabulátor, znaky odřádkování a další.
Samostatných aplikací pracujících s regulárními výrazy je dostatek a jsou z kategorie shareware i freeware. Jako příklad uvádím Regex++, Regulator, Expresso a jiné. Za nejlepší (shareware) považuji RegexBuddy (náhled je uveden níže). Jeho modul Grep pak umožňuje nahrazovat řetězce i v celé kolekci souborů. Program navíc obsahuje i malou databanku příkladů.
Dostáváme se k tomu podstatnému, jak pracovat s objektem RegExp pod VBA. Nejprve je třeba provést odpovídající deklaraci.
Kód VBA
Dim RegEx AsObject
Set RegEx = CreateObject("VBScript.RegExp")
'alternativně Tools / References
'Microsoft VBScript Regular Expressions x.x
Dim RegEx2 AsNew RegExp
A zde je malá ukázka práce.
Kód odpovídající akci z obrázku:
Kód VBA
PrivateSub CommandButton3_Click()
Dim RegEx AsNew RegExp
Dim Text AsString
Dim SeznamRetezcu AsString
Dim Retezec As Match
Text = Text & "Odkaz http://www.seznam.cz nás láká na internetovou stránku." & vbLf
Text = Text & "Zápis ftp://ftp.cesnet.cz/ poukazuje na FTP server." & vbLf
Text = Text & "A konečně file://localhost/C:/test.txt značí lokální soubor." & vbLf