Programare cu Visual Basic în Word


Astăzi am avut nevoie de ceva la modul arzător şi nu am putut rezolva decât scriind câteva linii de cod în Visual Basic, ce le-am rulat ca macro în MS Word. Dar am să mă explic mai încolo. Pentru moment să facem încălzirea: pentru pretenţii deosebite, Word-ul prinde aripi cu Visual Basic. Poţi programa cu destul de mare libertate atât prelucrări pe text cât şi interacţiuni cu utilizatorul, inclusiv pentru formulare din Word (mda… cam neobişnuit, dar totuşi se face). Vă propun în continuare câteva coduri simple tocmai în speranţa că vă voi convinge.

imagine

Editorul îl puteţi lansa în diverse moduri. Cel mai rapid cu Alt+F11, dar eu uneori când vreau să merg pe un cod anume folosesc Alt+F8 şi apoi Edit. Primul exemplu conţine doar o linie şi putem intui ce face: presupunând că am selectat un text, o parte dintr-un text, va număra câte cuvinte sunt conţine. Foarte simplu, nu?

Sub ABC1()
    MsgBox "Sunt selectate " & Selection.Words.Count & " cuvinte!"
End Sub

Al doilea exemplu merge mai departe. Din nou presupunem că am avea un text selectat. Îl salvăm temporar într-o variabilă, apoi trimitem în locul selecţiei tagul de deschidere, textul iniţial şi tagul de închidere pentru text îngroşat (pentru HTML). Evident, exemplul ar putea fi mai complex, verificând dacă într-adevăr avem un text selectat. De dragul simplităţii avem însă totul în patru linii de cod.

Sub ABC2()
    tempText = Selection.Text
    Selection.TypeText ("<strong>")
    Selection.TypeText (tempText)
    Selection.TypeText ("</strong>")
End Sub

Alt exemplu. Acum nu mai presupunem că s-a marcat un text ci mergem pe tot textul din fişierul deschis. Avem o buclă ce ia cuvânt cu cuvânt, şi dacă e scris îngroşat, incrementăm numărătorul. Şi uite aşa putem să aflăm câte cuvinte sunt scrise îngroşate. Iarăşi exemplul e cam inutil dar prindeţi ideea: similar se poate face parcurgere pe paragrafe şi verifica sau aplica stiluri, schimba mărime şi altele.

Sub ABC3()
    numarator = 0
    Selection.WholeStory
    For Each cuvant In Selection.Words
        If cuvant.Font.Bold = True Then
            numarator = numarator + 1
        End If
    Next
    MsgBox "Am numarat " & numarator & "cuvinte ingrosate!"
End Sub

Ajungem şi la ce mă interesa pe mine. Nu cred că voi lămuri din descriere dar încerc: am primit un text în care anumite cuvinte erau scrise cu litere mari dar doar aparent, pentru că era de fapt fontul setat pe All Caps (dacă ştiţi la ce mă refer înţelegeţi toată povestea, altfel ba). Nici un Replace avansat nu mi-a putut rezolva problema, dar a mers cu un macro în VBScript de câteva rânduri. E cel de mai jos. Şi astfel mi-am salvat ziua…

Sub ABC4()
    Selection.WholeStory
    For Each cuvant In Selection.Words
        If cuvant.Font.AllCaps = True Then
            cuvant.Case = wdUpperCase
        End If
    Next
End Sub

Apreciază articolul:

1 stea2 stea3 stea4 stea5 stea (4 evaluări, media: 5,00 din 5)
Loading...Loading...

4 comentarii

  1. gxg spune:

    Hm, probabil nu inteleg problema exacta, dar nu vad de ce nu se poate rezolva si fara macro: select all text, format font, uncheck „All caps”. Done.

  2. radu.capan spune:

    Nope. Am texte in care anumite cuvinte se vad cu majuscule, dar nu pentru ca ar fi scrise cu majuscule, ci pentru ca sunt puse ca stil de font cu AllCaps. La copiere din Word in Windows Live Writer, acele cuvinte cu majuscule apareau normal, pentru ca erau scrise normal, stilul AllCaps pierzandu-se (daca se copiaza in Notepad insa, se conserva). Cum parcurgerea manuala era exclusa la sute de pagini, doar solutia macro a existat.

  3. geo spune:

    Multumesc!
    1. Notepad++ si PSPad „nu stiu” toate sintaxele, ex. fisiere playlist.pls sau vCalendar.
    Acestea au ceva asemanator cu XML.

    2. Acum am rezolvat cu Word:
    +–––––––––––––––+
    Sub ABC5()
    Selection.WholeStory
    For Each cuvant In Selection.Words
    If cuvant = „BEGIN” Or cuvant = „END” Then
    cuvant.Font.Bold = True
    cuvant.Font.ColorIndex = wdRed
    End If
    Next
    End Sub
    +–––––––––––––––+

    3. La Notepad++ sau PSPad se pot defini-adauga alte formate de sintaxa ?

  4. radu.capan spune:

    Ma bucur ca te-a ajutat Word-ul cu macro scris. La 3) nu stiu sa raspund.


Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *