Ž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č.
Word VBA
Re: Word VBA
Pozdravljeni,
to je osnovni programerski problem in tudi lotiti se ga morate tako.
PS: teksta ne 'poboldamo' temveč ga 'odebelimo'
to je osnovni programerski problem in tudi lotiti se ga morate tako.
- Program je lahko v dveh stanjih ali išče uro sicer pa išče konec niza ki ga mora obarvati.
- Č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
- Č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
- Če je prišel do konca dokumenta potem konča
- Na začetku je program v stanju iskanja ure
PS: teksta ne 'poboldamo' temveč ga 'odebelimo'
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator
Re: Word VBA
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
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
Re: Word VBA
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:
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
Matjaž Prtenjak
Administrator
Re: Word VBA
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 deluje in opravi prav tisto kar sem želel. Iskrena hvala za vso pomoč - ponovno
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