[ 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
[ vojvoda1010 @ 27.07.2019. 09:11 ] @
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?

Ako mi trebaju linije kako da uradim da uzima 1,3,5 itd

pretpostavljam da su linije redovi