[ vojvoda1010 @ 03.03.2017. 11:29 ] @
Imam sledecu situaciju: imam folder sa vise word fajlova i sad iz svakog worda mi treba tekst prve i druge linije prve strane svakog fajla, da li ima mogucnost da u posebnom wordu preko macroa uzmem prvu i drugu liniju svakog fajla? Ili ako to nije moguce da li postoji macro koji bi selektovao u wordu koji ima 100 strana svaku stranu i to njegovu prvu i drugu liniju?
[ Jpeca @ 07.03.2017. 09:24 ] @
Scenario mi se učinio interesantan i zgodan za VBA.
Postavka je ovakva: imamo otvoren Word dokument, ja sam ga nazvao MainDoc i u njemu startujemo makro. Makro nalazi sve word dokumente u zadatom folderu i za svaki od dokumena poziva proceduru AddLines koja prepisuje prve dve linije iz tog dokumenta na kraj početnog dokumenta (odakle je makro startovan)
MainDoc treba da bude u nekom drugom folderu - ne u ovom koji se pretražuje.

Osnovno je napraviti proceduru koja iz zadatu putanju dokumenta prepisuje prve dve (ili da uopštimo numLine) linija na kraj otvorenog dokumenta
Code:
Sub AddLines(srcDoc As String, numLine As Integer)
' Ova procedura otvara document strDoc  i
' Prepisuje prvih numLine iz tog dokumenta
' Na kraj otvorenog  dokumena
' P.Jovanovic za elitesecurity.org
'
Dim lineFromSource As String
' Otvaranje dokumenta za pr
Documents.Open FileName:=srcDoc
Selection.MoveDown Unit:=wdLine, Count:=numLine
Selection.HomeKey Unit:=wdStory, Extend:=wdExtend
lineFromSource = Selection.Text
ActiveDocument.Close SaveChanges:=False
 
' Upis na kraj ovog dokumenta
ThisDocument.Activate
With Selection
     .EndKey Unit:=wdStory
     .TypeParagraph
     .TypeText lineFromSource
End With
End Sub


Posle tu proceduru pozivaš u petlji - primer petlji koja prolaze kroz folder ima na netu (čini mi se da je nešto već i bilo na elitesecurity ali nisam našao pa sam uzeo kod sa stackoverflow

Za probu otvori dokument u prilogu i omogući makroe.
Startuj Alt+F11 da otvoriš VBA editior. Promeni folder u LoopDirectory prema tvom slučaju. Ako je potrebno umesto ekstenzije docx stavi doc.
Snimi izmene.
Iz dokumenta pokreni mako Alt+F8, LoopDirectory


[ vojvoda1010 @ 14.03.2017. 19:41 ] @
Izmeni sam folder pretrage u loop ali nista se ne desava?
[ Jpeca @ 16.03.2017. 08:38 ] @
Da li si sve korake uradio kako sam naveo? Kod mene lepo radi sa radnom sveskom koju sam poslao i mojim folderom koji sadrži tri Word dokumenta - vidi prilog.

Koristi debug u VBE ili probaj da postaviš MsgBox u LoopDirectory pa kad startuješ LoopDirectory vidi kroz poruke da li uzima neke fajlove

Code:

Sub LoopDirectory()
' Petlja koja prolazi kroz sve word document u folderu
' I poziva proceduru za prepis prve dve linije iz svakog od dokuemnata
' Modifikovano sa stackoverflow.com
    
    Dim strDoc As String
    Dim folder As String
    folder = "T:\MyFiles\"
 
    strDoc = Dir(folder & "*.docx")
    Application.ScreenUpdating = False  ' iskljucuje refres ekrana
    Do While strDoc <> ""
        MsgBox "Obrada dokumenta " & folder & strDoc
        AddLines folder & strDoc, 2
        strDoc = Dir
    Loop
    Application.ScreenUpdating = True  ' vraca refresh
End Sub
[ vojvoda1010 @ 17.03.2017. 20:07 ] @
Opet nece, sigurno nisam ispostovao proceduru, da li ovako treba
1. Kopiram ceo code i to Prvi ili samo drugi,
2. Da li ako koristim samo Prvi kod (mislim na veci) menjam samo folder putanje u delu koda loop directory?
[ Jpeca @ 20.03.2017. 10:06 ] @
Za početka ništa ne kopiraš.

1/ Raspakuju arhivu iz prethodnog odgovora u C:\Temp. Proveri da tu ima folder \MyFiles i da u njemu ima tri word dokumenta Test1.docx, Test2.docx i Test3.docx
Dokumenti su popunjeni nekim "slučajnim" sadržajem, možeš da otvoriš neki da proveriš. Zatvori sve word doumente.

2/ Otvori dokument MainDoc iz priloga i bitno je da makroi budu omogućeni. Nije potrebno da ništa menjaš u makroima ako si raspakovao kako sam naveo.

3/ Startuj makro Loop Alt+F8, pa izaberi LoopDirectory.

4/ Šta se dešava? Trebalo bi da se dodate linije iza "Ovo je glavni dokument..."

5/ Ako nisu dodate nove linije startuj Test (Alt+F8 > Test). Šta si dobio? Trebalo bi da ti se pojavi poruka Prvi dokument za obradu je: ...
[ vojvoda1010 @ 20.03.2017. 23:20 ] @
To je to, hvala Jpeca.
Bio je problem u sledecem putanja do foldera sam kopirao iz bara u folderu, ali kada sam kopirao nije mi na kraju dodao "/" pa zato nije reagovalo.

Imao bih jos par pitanja:
1) da li mogu i gde da menjam koju liniju da uzima, npr. Prvih 4 ili 1,3,5?
2) da li moze da kopira da iz svakog worda ako ima vise strana svaku 1 i 2 liniju?
3) da li moze iz tih vise word dokumenta uzme sve paragraph center?
[ Jpeca @ 21.03.2017. 08:04 ] @
1/ Naravno, predviđen je za to parametar procedure AddLines - numLine. U proceduri LoopDirectory u pozivu ove procedure umesto 2 dodaš šta ti treba

Code:
AddLines folder & strDoc, 2


Ako često menjaš možeš ovo da postaviš u promenljivu ili konstantu u Loop Directory

Code:
Sub LoopDirectory()
' Petlja koja prolazi kroz sve word document u folderu
' I poziva proceduru za prepis prve dve linije iz svakog od dokuemnata
' Modifikovano sa stackoverflow.com
    
    Const nLines As int  = 2   ' Deklaracija konstante 
    Dim strDoc As String
    Dim folder As String
    folder = "T:\MyFiles\"
 
    strDoc = Dir(folder & "*.docx")
    Application.ScreenUpdating = False  ' iskljucuje refres ekrana
    Do While strDoc <> ""
        MsgBox "Obrada dokumenta " & folder & strDoc
        AddLines folder & strDoc, nLines   ' Ovde se poziva  nLines umesto 2 
        strDoc = Dir
    Loop
    Application.ScreenUpdating = True  ' vraca refresh
End Sub


2/ Da. U AddLines umesto
Selection.MoveDown Unit:=wdLine, Count:=numLine
Selection.HomeKey Unit:=wdStory, Extend:=wdExtend

Treba dodati petlju po stranicama (Prelazak na sledeću stranicu Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext) i izmeniti selekciju

3/ Trebalo bi da nađeš i selektuješ sve pasuse sa ogovarajućim formatiranjem. Može da se počne od ovoga Select All Headings Pargraphs
[ vojvoda1010 @ 21.03.2017. 09:36 ] @
Pojavio mi se problem, kada sam primere raspakovao uradio je ok, a kada sam ubacio pokazao gresku run-time error '5151'
Word was unable to read this document. It may be corupt. Try one or more of the followung:
Open and repair the file.
Open the file with the Text Recovery converter.

Da nije jedan od problema i to sto mi word dokumenti svaki od njih ima vise strana?



Da li moze da uzima 1 pa 3 pa 5 liniju,
Ako moze pretostavljam da isto menjam
AddLines folder & strDoc, 2?

Da li to stavljam iz strDoc 1,3,5 ili ne?


[ Jpeca @ 21.03.2017. 11:39 ] @
Ne znam u čemu je problem jer nemam fajl. Konkretan problem koji si naveo izgleda je vezan za otvaranje dokumenta, a ne zato što dokument ima više strana. Probao sam da ubacim dokument sa više strana u MyFiles folder i prošao je bez problema.


Citat:
Da li moze da uzima 1 pa 3 pa 5 liniju

Mora da se izmeni procedura - ova uzima uvek prvih n linija.
[ vojvoda1010 @ 21.03.2017. 18:25 ] @
U prilogu folder.


Da li mora ceo kod da se menja da bi uzimao 1 ili 3 ili 5 liniju ili kombinacija 2,4,7?
[ Jpeca @ 22.03.2017. 06:36 ] @
Problem je što nazivi fajlova sadrže ćirilične znake. VBA standardno ne radi sa unicode stringovima.

Ako baš insistiraš da ti nazivi ostanu sa ćiriličnim karakterima treba u regionlim setovanjima promeniti opciju za non-unicode aplikacije
In Control Panel > Regional and language > Administrtive tab > Change system locale ... "
Za system locale to use when displaying text in programs that do not support Unicode izaberi: Serbian (Cyrillic, Serbia)

Imaj na umu da će ti se ovo odraziti i na ostale aplikacije.

Citat:
Da li mora ceo kod da se menja da bi uzimao 1 ili 3 ili 5 liniju ili kombinacija 2,4,7?

Treba izmenti rutinu AddLines ali ne znam tačno šta hoćeš. Da li se radi o linijama ili pasusima - zašto bi se linije preskakale prilikom kopiranja? Da li je uvek tri parametra ili više?
[ vojvoda1010 @ 22.03.2017. 12:43 ] @
1) pretpostavljam da bi morao da sve preimenujem, da li moze da se automatski promene? Da li mora i tekst u samom wordu na cirilici da se menja?
2) znaci mogu pasusi, posto mi treba na preskok uzimanje?
3) da li bi mogla kombinacija linija i pasusa?
[ Jpeca @ 23.03.2017. 15:52 ] @
Rename više fajlova može da se uradi iz Command prozora, a postoje i razni alati za to npr. Total Commander ima takav alat.

Ako imaš nameru da se baviš automatizacijom u Wordu možeš da kreneš odavde Getting Started with VBA in Word