Munkámból fakadóan szükséges VBscripteket csinálni a munkatársaimnak.
Az egyik ilyen esetében nem a várt eredménnyel futott. A VBscript főleg keresés/cseréket tartalmaz.
Az alábbi ezek közül rendben végrehajtódik és az intPunct változó tartalmazza az összes találat számát:
' <[BI]>[!,.:;?…] helyett [!,.:;?…] <[BI]>
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
' !,.:;?…
.Text = "\^0060([BI]@)\^0062([\^0033\^0044\^0046\^0058\^0059\^0063\^0133]@)"
.Replacement.Text = "\2 <\1>"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
Do While .Execute(Replace:=wdReplaceOne)
intPunct = intPunct + 1
Loop
End With
- A következő keresés/csere kód, aminek ugyanaz a beállítása, mint a fentinek, viszont a dokumentumban csak az első előfordulást cseréli ki, az összes többit nem, és az intDecodes változó is 1 értékű. Miért?
' Bold Italic decode <BI>kifejezés</BI> helyett kifejezés charBoldItalic karaktersílussal formázva
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^0060BI^0062(*@)^0060^0047BI^0062"
.Replacement.Text = "\1"
.Replacement.Style = ActiveDocument.Styles("charBoldItalic")
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
Do While .Execute(Replace:=wdReplaceOne)
intDecodes = intDecodes + 1
Loop
End With
- A 2. keresés/cserét globálisra állítva (wdReplaceALL tulajdonsággal) nálam az összes előfordulást megtalálja és cseréli pc-n Win 10 alatt futó Word 2007-ben (12.06.6787.5000), valamint Mac Minin Ventura 13.5.2 alatt futó Mac Microsoft Word 16.92-ben is (24120731).
Viszont a munkatársaim gépein Win alatt futó különböző Word verziókban az előfordulások egy részét találja meg és cseréli (pl. 9 előfordulásból 5-öt). Miért?
' Bold Italic decode <BI>kifejezés</BI> helyett kifejezés charBoldItalic karaktersílussal formázva
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^0060BI^0062(*@)^0060^0047BI^0062"
.Replacement.Text = "\1"
.Replacement.Style = ActiveDocument.Styles("charBoldItalic")
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
- A Wordban végzett cserekor kapunk egy panelt, amiben a Word tájékoztat az elvégzett cserék számáról.
A 3. pont alatti globális cserekor hogyan lehet lekérdezni a cserék számát VBscriptben?