Macro pentru inlocuire diacritice

Informatii despre cum se utilizeaza Microsoft Word 2003. Editare, formatare, automatizare de documente
ccirtina
Mesaje: 280
Membru din: Lun Oct 11, 2010 9:49 pm
Localitate: Craiova

Re: Macro pentru inlocuire diacritice

Mesaj de ccirtina » Mar Oct 12, 2010 10:04 pm

Hai sa mai complicam putin.

Cod: Selectaţi tot

dim txt1, txt2, txt3, txt4 as string
txt1 = "primul text"
txt2 = "textul doi"
txt3 = "textul trei"
txt4 = "textul patru"

srcString = txt1, txt2
dstString = txt3, txt4
problema este ca nu imi accepta virgula, procedura este gresita acesta este mesajul care imi apare.
practic ce am gresit?
Ultima oară modificat Mie Oct 13, 2010 7:33 am de către Dr.Windows, modificat 1 dată în total.
Motiv: Adaugare taguri CODE

Dr.Windows
Moderator
Moderator
Mesaje: 4570
Membru din: Vin Iul 31, 2009 7:32 am

Re: Macro pentru inlocuire diacritice

Mesaj de Dr.Windows » Mie Oct 13, 2010 7:31 am

Practic ai gresit modul de alocare a unei valori pentru o variabila... nu se poate sa faci o atribuire de genul:

Cod: Selectaţi tot

srcString = txt1, txt2
Daca tii neaparat la alocarea mai multor variabile atunci ar fi trebuit sa le concatenezi cu "&" pentru ca srcString este un sir de caractere, adica asa:

Cod: Selectaţi tot

srcString = txt1 & "," & txt2
Asta deoarece este nevoie de acea virgula in momentul in care se face determinarea elementelor din matricea de siruri, ceea ce inseamna ca nu poti inlocui siruri de caractere ce contin la randul lor ",", mai exact nu poti inlocui sirul "alb, negru" cu "rosu, albastru" ci doar elementele separate.

Daca nu tii neaparat la acele variabile poti crea matricele de siruri direct:

Cod: Selectaţi tot

srcString = "primul text, textul doi"

ccirtina
Mesaje: 280
Membru din: Lun Oct 11, 2010 9:49 pm
Localitate: Craiova

Re: Macro pentru inlocuire diacritice

Mesaj de ccirtina » Mie Oct 13, 2010 4:04 pm

Multumesc mult.
Astazi la serviciu am intampinat urmatoarea problema:
Am documente la care inlocuirea de diacritice este putin diferita fata de ceea ce stim in mod obisnuit, adica in loc de Ş,ş,Ţ,ţ,Ă,ă,Î,î,Â,â in macrou imi apare : ChrW(170), ChrW(222), ChrW(254), ChrW(227), ChrW(186) ce trebuie inlocuite cu : ChrW(536), ChrW(538), ChrW(539), ă, ChrW(537)
practic, in loc sa caut si sa inlocuiesc pe fiecare in parte (procedura lunga), sa folosesc procedura de mai sus care mi se pare foarte eficace.

ccirtina
Mesaje: 280
Membru din: Lun Oct 11, 2010 9:49 pm
Localitate: Craiova

Re: Macro pentru inlocuire diacritice

Mesaj de ccirtina » Mie Oct 13, 2010 6:23 pm

am gasit ceva:

Cod: Selectaţi tot

 Sub ReplaceQuotes()
Dim vFindText As Variant
Dim vReplText As Variant
Dim sFormat As Boolean
Dim sQuotes As String
Dim i As Long

'Ask the user whether to format with smart or straight quotes
sQuotes = MsgBox("Click 'Yes' to convert smart quotes to straight quotes." & vbCr & _
"Click 'No' to convert straight quotes to smart quotes.", _
vbYesNo, "Convert quotes")

'Record the current setting of the autoformat option to replace straight quotes with smart quotes
sFormat = Options.AutoFormatAsYouTypeReplaceQuotes


If sQuotes = vbYes Then 'The user has clicked 'Yes'

     'Define the lists of smart quotes and their replacements
     vFindText = Array(Chr(147), Chr(148), Chr(145), Chr(146))
     vReplText = Array(Chr(34), Chr(34), Chr(39), Chr(39))

     'Set the autoformat option to replace straight quotes with smart quotes to off
     Options.AutoFormatAsYouTypeReplaceQuotes = False

     'Start from the top of the document
     Selection.HomeKey wdStory
     With Selection.Find
          .Forward = True
          .Wrap = wdFindContinue
          .MatchWholeWord = True
          .MatchWildcards = False
          .MatchSoundsLike = False
          .MatchAllWordForms = False
          .Format = True
          .MatchCase = True

          'replace each item from the first array with the corresponding item in the second array
          For i = LBound(vFindText) To UBound(vFindText)
               .Text = vFindText(i)
               .Replacement.Text = vReplText(i)
               .Execute Replace:=wdReplaceAll
          Next i
     End With
Else 'User clicked 'No'

     'Use autoformat to replace straight quotes with smart quotes

     Options.AutoFormatReplaceQuotes = True
     Selection.Range.AutoFormat
End If

'Finally reset the autoformat setting to its start configuration
Options.AutoFormatAsYouTypeReplaceQuotes = sFormat
End Sub

Dr.Windows
Moderator
Moderator
Mesaje: 4570
Membru din: Vin Iul 31, 2009 7:32 am

Re: Macro pentru inlocuire diacritice

Mesaj de Dr.Windows » Mie Oct 13, 2010 9:12 pm

ccirtina scrie: in loc sa caut si sa inlocuiesc pe fiecare in parte (procedura lunga), sa folosesc procedura de mai sus care mi se pare foarte eficace.
Nu stiu despre care "procedura de mai sus" vorbesti tu... dar sa stii ca ambele sunt la fel - si codul recomandat de mine si cel postat de tine mai sus fac exact acelai lucru, singura diferenta ar fi ca la mine "bucla" de cautare apeleaza o functie pe cand la ei aceeasi "bucla" este in aceeasi procedura.

Este posibil sa ai dreptate pentru documente lungi, codul postat de mine sa fie ceva mai lent pentru ca intotdeauna exista o "penalizare de viteza" la apelul unei functii si de aceea este posibil ca cel postat de tine sa fie mai rapid.

In rest fac acelasi lucru, diferenta "majora" fiind modul de declarare a sirurilor de cautare - ce ai postat tu face o declarare pe baza codului "unicode" al caracterului respectiv.

Acum se poate alege intre 2 variante... ;)

Închis

Înapoi la “Intrebari despre Word 2003”