2. diel - Objekt Range vo VBA pre Word - Vymedzenie, základné vlastnosti
V tejto lekcii si preberieme vymedzenie a základné vlastnosti objektu
Range
vo VBA pre Word. Ide o základný objekt určený na
manipuláciu s textom. Zaisťuje jeho obsluhu svojimi vlastnosťami a
metódami.
Objekt Range
V texte budeme ďalej používať v zmysle vymedzenej časti textu objekt
Range
alebo slovenský výraz oblasť. Pomocou
programovacieho jazyka VBA budeme ovládať texty. Aby sme vymedzili oblasť
textu, s ktorou budeme pracovať, je vytvorený objekt Range
. V
definícii tohto objektu musíme určiť, aký rozsah textu je pre objekt
Range
vymedzený. Môže to byť celý dokument, ale môžu to byť
jeho menšie časti, alebo napríklad jedno slovo alebo jeden znak.
Vymedzenie oblasti
Pokiaľ definovaný objekt, napríklad odsek zavoláme s vlastnosťou
Range
, potom je vrátený objekt Range
predstavujúci
celý odsek:
ActiveDocument.Paragraphs(7).Range
Podobne je možné ako oblasť označiť celý dokument:
Application.Documents(1).Range
Zdôrazňujem, že následne nejde o zoznam vlastností a metód, ale o ich najčastejších reprezentantov.
Vlastnosti:
Medzi vlastnosti radíme:
Start
,End
,Sentences
,Words
,Characters
.
Medzi metódy radíme:
SetRange
,Collapse
,Select
.
Collapse
a Select
sa budeme zaoberať až v
nasledujúcej lekcii.
Vlastnosti Start
a
End
Tieto dve vlastnosti vymedzujú prvý a posledný znak oblasti. Je možné ich čítať pre zistenie ako je oblasť vymedzená a je možné ich novo definovať alebo meniť.
Ukážka kódu:
'Následujícím příkazem vybereme jako oblast Range prvních 25 znaků aktivního dokumentu. Set varRange = ActiveDocument.Range(Start:=0, End:=25)
Vlastnosti Start
a End
z iných, už definovaných
oblastí Range
, možno tiež použiť na stanovenie hraníc novej
oblasti Range
, alebo využiť vlastnosti Range
pri
iných objektoch, tu pri odseku:
Public Sub subOblast() Dim vX, vY As Long Dim varOblast As Range vX = ActiveDocument.Paragraphs(2).Range.Start vY = ActiveDocument.Paragraphs(4).Range.End 'vymezení oblasti Range Set varOblast = ActiveDocument.Range(Start:=vX, End:=vY) 'výpis počtu znaků ve vymezené oblasti Debug.Print varOblast.Characters.Count End Sub
Metóda SetRange
Zmena ohraničenia oblasti je možná aj pomocou tejto metódy. Tá
stanovuje nové hranice už definovanej oblasti
Range
tak, že udá nový počiatočný alebo koncový bod.
Definícia: ObjectRange.SetRange(Start, End)
.
Ukážka kódu:
'změna konce vymezené oblasti Set varRange = ActiveDocument.Paragraphs(5).Range varRange.SetRange Start:=varRange.Start, End:=ActiveDocument.Paragraphs(8).Range.End
Vlastnosť Words
Na prácu so slovami vo vyznačenej oblasti použijeme vlastnosť
Words
objektu Range
, ktorá vracia kolekciu všetkých
slov v oblasti a na jednotlivé slová sa dostaneme priamo číselným indexom,
alebo prechádzaním kolekcie v cykle. Vlastnosť nemá
parametre.
Dôležité je uvedomiť si, že za slovo je v objektovom modeli považovaná aj interpunkcia.
Na obrázku si vypíšeme slová z nasledujúceho textu "Riadok č.1! Je, nie je - prvý":
Každé slovo z kolekcie Words
je súčasne
objektom Range
.
Ukážka kódu:
Dim varRng As Range 'lze psát a je to správně. Odstavec nejdříve označíme jako oblast a v oblasti už máme vlastnost Words Set varRng = ActiveDocument.Paragraphs(1).Range.Words(64)
V príklade identifikujeme prvé slovo v dokumente, a ak je
"Vážený"
alebo "Vážená"
, vieme, že ide o
list:
Public Sub subSlovo() Dim varSlovo As String 'vlastnost text znamená, že bude vrácen obsah objektu Word. Bez této vlastnosti by byl vrácen objekt varSlovo = ActiveDocument.Range.Words(1).Text 'odstraníme mezery varSlovo = Trim(varSlovo) If varSlovo = "Vážený" Or varSlovo = "Vážená" Then MsgBox "Aktivní dokument je dopisem" End If End Sub
Zo základného kurzu Základy Microsoft VBA si zopakujeme prácu s prechádzaním celej kolekcie. Tu v príklade prejdeme kolekciu slov vo vymedzenej oblasti:
Public Sub subNajde() Dim varSlovo As Object Dim varPocet As Integer varPocet = 0 'cyklus přes všechna slova dokumentu For Each varSlovo In ActiveDocument.Range.Words If Trim(varSlovo) = "atd" Then varPocet = varPocet + 1 End If Next varSlovo MsgBox "A tak dále -> je v dokumentu použito " & varPocet & " krát" End Sub
Príklad práce vo vybranom oddiele. Hľadané slovo bude pri nájdení
zrušené. Všimnime si použitie funkcie LCase
, aby bolo nájdené
slovo bez rozdielu veľkých a malých písmen:
Public Sub subSmazat() Dim varOblast As Object Dim varSlovo As Object 'vymezíme první oddíl dokumentu Set varOblast = ActiveDocument.Sections(1).Range 'cyklus přes všechna slova oddílu For Each varSlovo In varOblast.Words 'funkce LCase převede všechny písmena na malá a tak zachytí i Blbec nebo BLBEC If LCase(varSlovo.Text) = "blbec " Then varSlovo.Delete Next varSlovo End Sub
Vlastnosť Characters
Vlastnosť Characters
vracia kolekciu všetkých znakov
v oblasti. S nimi je možné pracovať metódami kolekcie, teda zistiť
poradie určitého znaku alebo početnosť jeho výskytu. Vlastnosť
nemá parametre.
Každý znak z kolekcie Characters
je súčasne
objektom Range
.
Ukážka kódu:
Dim varRng As Range 'lze psát a je to správně Set varRng = ActiveDocument.Paragraphs(11).Range.Characters(124)
V nasledujúcom príklade hľadáme znak č
a súčasne určíme
jeho poradie v oblasti:
Public Sub subZnak() Dim varOblast As Object Dim varZnak As Object Dim vP As Integer vP = 0 'vymezíme první odstavec dokumentu Set varOblast = ActiveDocument.Paragraphs(1).Range 'cyklus přes všechny znaky odstavce For Each varZnak In varOblast.Characters vP = vP + 1 'funkce LCase převede všechny písmena na malá If LCase(varZnak.Text) = "č" Then MsgBox "Znak č, pořadí " & vP Next varZnak End Sub
Objekt Document
má vlastnosti Words
a Characters
, vracajúce príslušné kolekcie, ktorých členovia
sú tiež súčasne oblasťou Range
.
Preto sú správne zápisy:
Dim varRng As Range Set varRng = ActiveDocument.Words(628) Set varRng = ActiveDocument.Characters(1597)
Vlastnosť Sentences
VBA umožňuje pracovať s vetami vo vybranej oblasti. Program Word s nimi
pracuje ako s kolekciou objektov a VBA k nej má prístup. Kolekcia viet je
vrátená vlastnosťou Sentences
objektu Range
a je
možné ju spracovávať podobne ako predchádzajúca kolekcia. Vlastnosť
nemá parametre.
Ukážka kódu:
Public Sub subVeta() Dim varOblast As Object Dim varVeta As Object Dim vP As Integer vP = 0 'vymezíme čtvrtý odstavec dokumentu Set varOblast = ActiveDocument.Paragraphs(4).Range 'cyklus přes všechny věty odstavce For Each varVeta In varOblast.Sentences vP = vP + 1 'zobrazí pořadí věty a počty znaků MsgBox "Věta č. " & vP & vbCrLf & "Počet znaků " & varVeta.Characters.Count Next varVeta End Sub
Objekt Document
má tiež vlastnosť Sentences
,
ktorá vracia kolekciu viet v dokumente. Príklad vymazania poslednej vety
dokumentu:
ActiveDocument.Sentences.Last.Delete
V budúcej lekcii, { NEXT}, budeme preberať objekt Range vo VBA pre Word. Zameriame sa na dve výnimočné metódy Collapse a Select.