IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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í":

VBA pro Word

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.


 

Předchozí článek
Úvod do VBA pro Word
Všechny články v sekci
VBA pro Word
Přeskočit článek
(nedoporučujeme)
Objekt Range ve VBA pro Word - Metody Collapse a Select
Článek pro vás napsal Luboš Marvan
Avatar
Uživatelské hodnocení:
4 hlasů
Snahou autora je žít podle svého
Aktivity