Centrare caractere

Dr.Word
Moderator
Moderator
Mesaje: 34
Membru din: Lun Sep 05, 2011 7:17 pm

Re: Centrare caractere

Mesaj de Dr.Word » Vin Feb 07, 2014 1:14 pm

Incercam, cum sa nu!
Dar as vrea sa-mi dati toate elementele. De unde pornim, unde vrem sa ajungem, cu toate elementele, cu toate amanuntele posibile si imposibile.
Adica, dupa ce am gasit, sa zicem, textul "sectiunea", vreau sa fie inlocuit cu... "Capitol" cu un CR(^13) inainte, si tot asa.

Si o scoatem noi la capat!
Dr. Word
MCT, MCTS
MOS Master Instructor
ITLearning

Apostolu
Mesaje: 285
Membru din: Joi Aug 20, 2009 4:05 pm

Re: Centrare caractere

Mesaj de Apostolu » Vin Feb 07, 2014 1:54 pm

Pornim de la:
- XP, Word 2003 si VB care stie wildcards.
- un text "nepaginat", aliniat stanga, New Times Roman, size 10, ca cel atasat.
- CONTINE DIACRITICE !!!
- Trebuie sa fie "caps senzitive", ca altfel centreaza "capitolul" care se afla in mijlocul unui rand si nu UN "capitol".
- dupa prelucrare se exporta in html de catre Word.
- in tot textul trebuie gasit : Capitolul 6 sau VI, Sectiunea 6 sau VI, Titlul 6 sau VI, etc. si randul imediat urmator (descrierea), introdus cate un rand nou deasupra la "Capitolul" si alt rand nou sub "descriere".
Apoi Capitolul si descrierea trebuie centrate.

In macro, modific eu "Capitolul" in "CAPITOLUL" sau in "Secţiunea", "SECŢIUNEA", "Titlul" etc.
Sau il salvez eu de X ori, in functie de cate Capitol, Sectiune, Titlu etc. am si imi fac butone pt. fiecare.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

Dr.Word
Moderator
Moderator
Mesaje: 34
Membru din: Lun Sep 05, 2011 7:17 pm

Re: Centrare caractere

Mesaj de Dr.Word » Sâm Feb 08, 2014 9:28 pm

Buna seara,
Se pare ca avem un mod de a privi lucrurile un pic diferit. Am observat o oarecare reticenta in utilizarea stilurilor, chiar pentru problema dumneavoastra.
Haideti sa va prezint puncul meu de vedere si sa prezint pe intelesul tuturor ce anume doriti de la aceasta automatizare. (Cu tot respectul pentru cititori, nu toti utilizatorii acestui forum lucreaza la nivel de cod ASCII)
Avem urmatoarele date:
-o lista de cuvinte (aici ar fi fost minunat daca mi-ati fi dat- o pe toata) -Capitolul, Sectiunea si/sau Titlu si dorim sa le "clasificam" ca titluri
- paragraful imediat urmator ("linia urmatoare"), care am dori sa fie un fel de subtitlu
-tot textul este neformatat, nu are stiluri si este alineat la stanga
Vrem sa obtinem:
-titlurile centrate cu un paragraf(linie goala) deasupra, ingrosate
-subtitlurile centrate si ele (aici nu stiu daca le doreati si ingrosate)

Cum am gandit rezolvarea:
Deoarece e complicat sa identificam la nivel de caracter toate aceste informatii, si cum Word-ul ne permite sa utilizam proprietatile paragrafelor, clasificarea tuturor acelor paragrafe ce contin cuvintele cerute o facem aplicandu-le tuturor stilul Heading1. Acest lucru ne va permite selectia simultana si clasificarea tuturor paragrafelor "de nivel 2" (randul urmator) carora le aplicam stilul Heading 2, iar pe cele care le preced le clasificam Heading 3.
Vom putea astfel sa selectam simultan toate caracterele ^13 (^p - "paragraph mark" in word) care au stilul heading 3 si sa le inlocuim cu doua ^P^P ceea ce inseamna ca am introdus cate un rand nou "inaintea " titlurilor
Apoi selectam toate caracterele ^p care au stilul heading2 si facem acelasi lucru (introducem o "linie" dupa subtitlu)
Si acum, nu mai ramane decat sa transformam stilul heading 3 in normal, stilul heading1 in normal, centrat si bold, si heading 2 in normal... nu mai stiu cum.
Acesta este modul in care am gandit problema si am pus-o in codul urmator:

Cod: Selectaţi tot

Sub findCapitol()
'
'Dr.Word
'
Dim i As Integer


    Selection.Find.ClearFormatting
    Selection.Find.Style = ActiveDocument.Styles("Normal")
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Style = ActiveDocument.Styles("Heading 1")
    With Selection.Find
        .Text = "CAP*"
        .Replacement.Text = ""
        .Forward = True
        .Format = True
        .MatchCase = True
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
       
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = "SEC*"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = True
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
       
    End With
 
    Selection.Find.Execute Replace:=wdReplaceAll

findhead
h213
h1
h2
h3

End Sub
Sub findhead()
Dim i As Integer

For i = 2 To ActiveDocument.Paragraphs.Count

If ActiveDocument.Paragraphs(i).Style = "Heading 1" Then

ActiveDocument.Paragraphs(i + 1).Style = "Heading 2"
ActiveDocument.Paragraphs(i - 1).Style = "Heading 3"

 End If

Next i

End Sub

Sub h213()
'
' dr.word
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Style = ActiveDocument.Styles("Heading 2")
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Style = ActiveDocument.Styles("Heading 2")
    With Selection.Find
        .Text = "^p"
        .Replacement.Text = "^p^p"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Style = ActiveDocument.Styles("Heading 3")
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Style = ActiveDocument.Styles("Heading 3")
    With Selection.Find
        .Text = "^p"
        .Replacement.Text = "^p^p"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Sub h3()
'
' h1 Macro
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Style = ActiveDocument.Styles("Heading 3")
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Style = ActiveDocument.Styles("Normal")
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Sub h1()
'
' h1 Macro
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Style = ActiveDocument.Styles("Heading 1")
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Style = ActiveDocument.Styles("Normal")
    Selection.Find.Replacement.Font.Bold = True
    Selection.Find.Replacement.ParagraphFormat.Alignment = wdAlignParagraphCenter
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Sub h2()
'
' h2 Macro
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Style = ActiveDocument.Styles("Heading 2")
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Style = ActiveDocument.Styles("Normal")
    Selection.Find.Replacement.Font.Bold = True
   Selection.Find.Replacement.ParagraphFormat.Alignment = wdAlignParagraphCenter
    
       Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Rulati find_capitol si.. sper ca este ceea ce v-ati dorit.

Problema cu codul dumneavoastra este ca Nu se lucreaza simultan in Word si cu wildcards si cu caractere speciale intr-o instanta find-replace si , cand facem un program, incercam sa facem mai putine operatii decat daca le-am executa "manual".
Daca doriti sa introduceti un "alineat" va trebui sa faceti acest lucru abia dupa ce ai transformat heading 3 in normal. Va trebui scindat codul.
Asta e tot ce am putut face pentru aceasta problema. Din pacate, mai mult de atat nu stiu ce-as sa mai putea sa fac.
Daca exista si alte opinii.. orice solutie e binevenita!
Oricum, si codul curent mai necesita imbunatatiri, dar, din pacate, nu ma pot dedica doar unui subiect. Mai asteapta cativa "candidati" cate o sugestie.
Va doresc numai bine!
Dr. Word
MCT, MCTS
MOS Master Instructor
ITLearning

Apostolu
Mesaje: 285
Membru din: Joi Aug 20, 2009 4:05 pm

Re: Centrare caractere

Mesaj de Apostolu » Dum Feb 09, 2014 1:39 pm

Nu am nici un fel de reticente, daca la final se obtine ce doresc ! :)
Pana una alta ....
" Compmpile error:
Ambigous name detected: findCapitol"

Daca sterg "find" ruleaza pe un singur "caz". Adica un singur "Capitol".
Dar introduce 3 randuri noi deasupra la Capitol si sub descriere.

Fac copy-paste de 4-5 ori la ce exista in fisierul A.doc trimis ca exenplu, ca sa vad cum ruleaza pe mai multe "Capitole" si nu mai face nimic.
Nici macar nu da eroare. :)

Dr.Word
Moderator
Moderator
Mesaje: 34
Membru din: Lun Sep 05, 2011 7:17 pm

Re: Centrare caractere

Mesaj de Dr.Word » Lun Feb 10, 2014 6:30 pm

Am refacut o parte.
Incercati acum, va rog, macro titluri. Posibil sa mai fi avut un macro cu acelasi nume (find_capitol!) de aceea a aparut eroarea de nume.

Cod: Selectaţi tot

Sub titluri()
'
'dr.word
'
'
Dim i As Integer


    Selection.Find.ClearFormatting
    Selection.Find.Style = ActiveDocument.Styles("Normal")
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Style = ActiveDocument.Styles("Heading 1")
    With Selection.Find
        .Text = "CAP*"
        .Replacement.Text = ""
        .Forward = True
        .Format = True
        .MatchCase = True
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
       
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = "SEC*"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = True
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
       
    End With
 
    Selection.Find.Execute Replace:=wdReplaceAll

findantet
h213
h3
h2
h1

End Sub
Sub findantet()
Dim i As Integer

For i = 2 To ActiveDocument.Paragraphs.Count

If ActiveDocument.Paragraphs(i).Style = "Heading 1" Then

ActiveDocument.Paragraphs(i + 1).Style = "Heading 2"
ActiveDocument.Paragraphs(i - 1).Style = "Heading 3"

 End If

Next i

End Sub

Sub h213()
'
' diana tanase
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Style = ActiveDocument.Styles("Heading 2")
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Style = ActiveDocument.Styles("Heading 2")
    With Selection.Find
        .Text = "^p"
        .Replacement.Text = "^p^p"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
   
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Style = ActiveDocument.Styles("Heading 3")
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Style = ActiveDocument.Styles("Heading 3")
    With Selection.Find
        .Text = "^p"
        .Replacement.Text = "^p^p"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
   
End Sub


Sub h1()
'
' h1 Macro
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Style = ActiveDocument.Styles("Heading 1")
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Style = ActiveDocument.Styles("Normal")
    Selection.Find.Replacement.ParagraphFormat.Alignment = wdAlignParagraphCenter
     With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Sub h2()
'
' h2 Macro
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Style = ActiveDocument.Styles("Heading 2")
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Style = ActiveDocument.Styles("Normal")
    Selection.Find.Replacement.ParagraphFormat.Alignment = wdAlignParagraphCenter
     With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Sub h3()
'
' h3 Macro
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Style = ActiveDocument.Styles("Heading 3")
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Style = ActiveDocument.Styles("Normal")
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Dr. Word
MCT, MCTS
MOS Master Instructor
ITLearning

Apostolu
Mesaje: 285
Membru din: Joi Aug 20, 2009 4:05 pm

Re: Centrare caractere

Mesaj de Apostolu » Lun Feb 10, 2014 7:03 pm

Ok !!!!!
Acum merge !
Face exact ce vroiam, minus boldarea la "descriere". (al doilea rand)
Credeti ca se poate adauga undeva la sfarsit ceva de genul
Selection.Find.Replacement.Font.Bold = True ?

DR.ACCESS
Moderator
Moderator
Mesaje: 300
Membru din: Lun Sep 05, 2011 5:06 pm

Re: Centrare caractere

Mesaj de DR.ACCESS » Lun Feb 10, 2014 7:15 pm

In macro h1 si in macro h2, dupa end with.
De bucurie ca le-am identificat, centrat si adaugat paragrafe am uitat de bold-uire.
Astept sa-mi spuneti daca va merge cu aceste modificari. La mine a mers.
D. Tanase
MCT, MCTS
MOS Master Instructor

Apostolu
Mesaje: 285
Membru din: Joi Aug 20, 2009 4:05 pm

Re: Centrare caractere

Mesaj de Apostolu » Lun Feb 10, 2014 8:27 pm

Numai in h2 trebuia ! La descriere.

Merge perfect !
Multumesc foarte mult !

Apostolu
Mesaje: 285
Membru din: Joi Aug 20, 2009 4:05 pm

Re: Centrare caractere

Mesaj de Apostolu » Mie Mar 05, 2014 3:20 pm

Scripturile functioneaza dar exista niste bug-uri !
Primul si cel mai deranjant ar fi ca inainte de fiecare :
Capitol (Sectiune, Titlu, etc.) centrat si boldat,
paragraful superior pierde alinierea initiala.
Adica se muta inapoi cu un "tab".

Închis

Înapoi la “Visual Basic for Application (VBA) - Intrebari tehnice”