Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

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.
Metódy:

Medzi metódy radíme:

  • SetRange,
  • Collapse,
  • Select.
Metódami 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ý":

VBA pre Word

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.


 

Všetky články v sekcii
VBA pre Word
Preskočiť článok
(neodporúčame)
Objekt Range vo VBA pre Word - Metódy Collapse a Select
Článok pre vás napísal Luboš Marvan
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Snahou autora je žít podle svého
Aktivity