Word VBA

Pomoč pri izdelavi makrov
Odgovori
Uros22
Prispevkov: 14
Pridružen: Če Jan 14, 2010 10:59 am

Word VBA

Odgovor Napisal/-a Uros22 »

Živjo,

lotevam se izziva.Primer:

07:15 XXXXX XXX XXX (YYYY YY)
16:20 XXX XXX
22:30 XXXXXX (YYYY)
23:30 XX XX X (YYYYYY)
04:30 XXXXXX

Z Word VBA makrom bi želel boldati tekst XXX, ki vedno nastopi za uro in se konča pred oklepajem ali pa za njim sledi odstavek (enter). Imate morda kakšen nasvet, kako poiskati in poboldati ta tekst? Hvala že v naprej za pomoč.
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Word VBA

Odgovor Napisal/-a admin »

Pozdravljeni,

:) to je osnovni programerski problem in tudi lotiti se ga morate tako.
  1. Program je lahko v dveh stanjih ali išče uro sicer pa išče konec niza ki ga mora obarvati.
  2. Če je v stanju iskanja ure se pomika po znakih naprej in če naleti na znak ki predstavlja cifro, potem pogleda ali naslednji znaki predstavljajo uro (ni vsaka cifra ura!). Če predstavljajo uro, potem je konec iskanja ure in program preide v stanje označevanja
  3. Če je program v stanju označevanja pogleda ali ni prišel do konca označevanja, kar predstavlja znak ( ali znak za konec vrstice chr(13)- če je našel ta znak potem mora spet iskati uro, sicer označi znak z odebeljeno pisavo
  4. Če je prišel do konca dokumenta potem konča
  5. Na začetku je program v stanju iskanja ure
To je zagotovo delujoč program, ki seveda ni najhitrejši... A zagotovo deluje.

PS: teksta ne 'poboldamo' temveč ga 'odebelimo' ;)
lp,
Matjaž Prtenjak
Administrator
Uros22
Prispevkov: 14
Pridružen: Če Jan 14, 2010 10:59 am

Re: Word VBA

Odgovor Napisal/-a Uros22 »

Hvala za hiter odziv in usmeritev. Z znanjem, ki se ga pridobil na tem forumu sem sestavil naslednji makro, ki na začetku odstavka poišče številko 0,1 ali 2. Sedaj mi pa zmanjka znanja, da bi ukaz .bold uporabil na pravem delu. Trenutno znam odebeliti ta odstavek, ne pa samo določen del besedila. Kakšen nasvet morda?

Sub Odebelimo()
Dim oRng As Range
For i = 1 To ActiveDocument.Paragraphs.Count
Set oRng = ActiveDocument.Paragraphs(i).Range
With oRng
.End = .End - 1
If (.Characters.First = "0" or .Characters.First = "1" or .Characters.First = "2") Then .Bold = True
End With
Next i
End Sub
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Word VBA

Odgovor Napisal/-a admin »

Pozdravljeni,

Ta koda ne bo dobra, saj vi predvidevate, da se čas nahaja na začetku odstavka in da je potrebno niz odebeljiti do konca odstavka. To pa ni ravno tisto, kar ste želeli v osnovi oz. tisto sem vsaj jaz razumel bolj splošno; torej da se lahko čas nahaja kjerkoli in potem je potrebno odebeljiti tekst.... No če je naloga preprostejša potem še toliko lažje.

Vendar pa vi preverjate samo prvi znak, kaj pa drugi znak in potem dvopičje in tretji, pa četrti?

Ampak, če se vrnem k vašemu vprašanju, kjer ne želite odebeliti prvega znaka, potem je koda sledeča:

Koda: Izberi vse

Sub Odebelimo()
  Dim i
  Dim oRng As Range
  
  For i = 1 To ActiveDocument.Paragraphs.Count
    Set oRng = ActiveDocument.Paragraphs(i).Range
    With oRng
      If (.Characters.First = "0" Or .Characters.First = "1" Or .Characters.First = "2") Then
        .Start = .Start + 1
        .Bold = True
      End If
    End With
  Next i
End Sub
lp,
Matjaž Prtenjak
Administrator
Uros22
Prispevkov: 14
Pridružen: Če Jan 14, 2010 10:59 am

Re: Word VBA

Odgovor Napisal/-a Uros22 »

Pozdravljeni,

hvala za pomoč. Makro sem poenostavil tako, da vedno išče uro na začetku odstavka. Iskanje oklepaja pa sem uredil na naslednji način.

Koda: Izberi vse

Sub Odebelimo()
Dim oRng As Range
    For i = 1 To ActiveDocument.Paragraphs.Count
        Set oRng = ActiveDocument.Paragraphs(i).Range
        With oRng
        .End = .End - 1
        If (.Characters.First = "0" Or .Characters.First = "1" Or .Characters.First = "2") Then
            stbesed = .Words.Count
            For j = 4 To stbesed
              If .Words(j).Characters.First = "(" Then Exit For
              .Words(j).Font.Bold = True
            Next
        End If
        End With
    Next i
End Sub
Koda deluje in opravi prav tisto kar sem želel. Iskrena hvala za vso pomoč - ponovno ;)
Odgovori