Lekce 2 - Objekt Range ve VBA pro Word - Vymezení, základní vlastnosti
V minulé lekci, Úvod do VBA pro Word, jsme se naučili pracovat s VBA v prostředí Wordu a seznámili jsme se s objekty nejvyšších úrovní v aplikaci MS Word. Konkrétně se jednalo o objekty Application, Document, Section, Paragraph.
V této lekci si probereme vymezení a základní vlastnosti objektu
Range
ve VBA pro Word. Jedná se o základní objekt určený k
manipulaci s textem. Zajišťuje jeho obsluhu svými vlastnostmi a metodami.
Objekt Range
V textu budeme dále používat ve smyslu vymezené části textu objekt
Range
nebo český výraz oblast. Pomocí
programovacího jazyka VBA budeme ovládat texty. Abychom vymezili oblast textu,
se kterou budeme pracovat, je vytvořen objekt Range
. V definici
tohoto objektu musíme určit, jaký rozsah textu je pro objekt
Range
vymezen. Může to být celý dokument, ale mohou to být
jeho menší části, nebo třeba jedno slovo nebo jeden znak.
Vymezení oblasti
Pokud definovaný objekt, například odstavec zavoláme s vlastností
Range
, potom je vrácen objekt Range
představující
celý odstavec:
ActiveDocument.Paragraphs(7).Range
Podobně lze jako oblast označit celý dokument:
Application.Documents(1).Range
Zdůrazňuji, že následně nejde o výčet vlastností a metod, ale o jejich nejčastější reprezentanty.
Vlastnosti:
Mezi vlastnosti řadíme:
Start
,End
,Sentences
,Words
,Characters
.
Metody:
Mezi metody řadíme:
SetRange
,Collapse
,Select
.
Metodami Collapse
a Select
se budeme zabývat až v
následující lekci.
Vlastnosti Start
a
End
Tyto dvě vlastnosti vymezují první a poslední znak oblasti. Lze je číst pro zjištění, jak je oblast vymezena a lze je nově definovat nebo měnit.
Ukázka 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 jiných, již
definovaných oblastí Range
, lze také použít ke stanovení
hranic nové oblasti Range
, nebo využít vlastnosti
Range
u jiných objektů, zde u odstavce:
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
Metoda SetRange
Změna ohraničení oblasti je možná také pomocí této metody. Ta
stanoví nové hranice již definované oblasti
Range
tak, že udá nový počáteční nebo koncový bod.
Definice: ObjectRange.SetRange(Start, End)
.
Ukázka kódu:
'změna konce vymezené oblasti Set varRange = ActiveDocument.Paragraphs(5).Range varRange.SetRange Start:=varRange.Start, End:=ActiveDocument.Paragraphs(8).Range.End
Vlastnost Words
K práci se slovy ve vyznačené oblasti použijeme vlastnost
Words
objektu Range
, která vrací kolekci všech slov
v oblasti a na jednotlivá slova se dostaneme přímo číselným indexem, nebo
procházením kolekce v cyklu. Vlastnost nemá parametry.
Důležité je uvědomit si, že za slovo je v objektovém modelu považována také interpunkce.
Na obrázku si vypíšeme slova z následujícího textu "Řádek č.1! Je, není - první":

Každé slovo z kolekce Words
je současně
objektem Range
.
Ukázka 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 příkladu identifikujeme první slovo v dokumentu, a pokud je
"Vážený"
nebo "Vážená"
, víme, že jde o
dopis:
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
Ze základního kurzu Základy Microsoft VBA si zopakujeme práci s procházením celé kolekce. Zde v příkladu projdeme kolekci slov ve vymezené 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
Příklad práce ve vybraném oddílu. Hledané slovo bude při nalezení
zrušeno. Povšimněme si použití funkce LCase
, aby bylo nalezeno
slovo bez rozdílu velký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
Vlastnost Characters
Vlastnost Characters
vrací kolekci všech znaků v
oblasti. S nimi lze pracovat metodami kolekce, tedy zjistit pořadí
určitého znaku nebo četnost jeho výskytu. Vlastnost nemá
parametry.
Každý znak z kolekce Characters
je současně
objektem Range
.
Ukázka kódu:
Dim varRng As Range 'lze psát a je to správně Set varRng = ActiveDocument.Paragraphs(11).Range.Characters(124)
V následujícím příkladu hledáme znak č
a současně
určíme jeho pořadí 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
, vracející příslušné kolekce, jejichž členové
jsou také současně oblastí Range
.
Proto jsou správné zápisy:
Dim varRng As Range Set varRng = ActiveDocument.Words(628) Set varRng = ActiveDocument.Characters(1597)
Vlastnost Sentences
VBA umožňuje pracovat s větami ve vybrané oblasti. Aplikace Word s nimi
pracuje jako s kolekcí objektů a VBA k ní má přístup. Kolekce vět je
vrácena vlastností Sentences
objektu Range
a lze ji
zpracovávat podobně jako předchozí kolekce. Vlastnost nemá
parametry.
Ukázka 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á také vlastnost Sentences
,
která vrací kolekci vět v dokumentu. Příklad vymazání poslední věty
dokumentu:
ActiveDocument.Sentences.Last.Delete
V příští lekci, Objekt Range ve VBA pro Word - Metody Collapse a Select, budeme probírat objekt Range ve VBA pro Word. Zaměříme se na dvě výjimečné metody Collapse a Select.