[ vojvoda1010 @ 10.01.2016. 10:16 ] @
kako ubaciti vise workbook-ova (koji imaju po jedan sheet) u jedan workbook ili u vise sheet-ova ili u jedan? I ako mora u vise sheet-ova da li postoji mogucnost podatke prebaciti u jedan sheet?
[ vojvoda1010 @ 10.01.2016. 11:29 ] @
http://www.extendoffice.com/do...ombine-multiple-workbooks.html


http://excel.tips.net/T003148_...iles_to_a_Single_Workbook.html

nasao sam ova dva pa ako moze objasnjenje za prvu metodu, kako bi se primenila sa drugim workbook
[ vojvoda1010 @ 13.01.2016. 15:20 ] @
Sub GetSheets()
Path = "C:\Users\dt\Desktop\dt kte\"
Filename = Dir(Path & "*.xls")
Do While Filename <> ""
Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
For Each Sheet In ActiveWorkbook.Sheets
Sheet.Copy After:=ThisWorkbook.Sheets(1)
Next Sheet
Workbooks(Filename).Close
Filename = Dir()
Loop
End Sub

probao sam ovaj kod samo sam zamenio Path = "C:\Users\dt\Desktop\dt kte\" (ime foldera) ali ne reaguje. Neko resenje?
[ Jpeca @ 14.01.2016. 15:38 ] @
Kod koji si naveo u prethodnom postu GetSheets radi korektno. Ja sam napravio jedan pom. folder kod mene i probao. Ne znam šta o kakvom problem kod tebe?
Iz zadatog foldera (Path) uzima sve fajlove sa ekstenzijom xls (Da nisu kod tebe xlsx ?) otvara jedan po jedan u petlji Do While ...Loop i kopira u tekuću radnu svesku iza prvog lista sve listove iz otvorene radne sveske (ActiveWorkbook.Sheets)

Jedini "problem" koji sam ja imao je dijalog da li treba snimanje pri zatvaranju radne sveske (Workbooks(Filename).Close) i to se može izbeći sa dodatnom opcijom
savechanges:=False

Ako hoćeš da iskopiraš samo prvi list iz svake otvorene radne sveske onda možeš da izostaviš unutrašnju petlju pa bi kod bio
Code:

Sub GetSheets()
Path = "D:\ExcelTmp\"
Filename = Dir(Path & "*.xls")
Do While Filename <> ""
    Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
     ActiveWorkbook.Sheets(1).Copy After:=ThisWorkbook.Sheets(1)
    Workbooks(Filename).Close savechanges:=False
    Filename = Dir()
Loop
End Sub


Ako hoćeš da kopiraš sve u jedan list onda umesto linije ActiveWorkbook.Sheets(1).Copy After:=ThisWorkbook.Sheets(1) pozovi proceduru za koprianje iz otvorene radne sveske iza poslednjeg popunjenog reda u aktivnom listu. Nešto slično već imaš http://www.elitesecurity.org/t488149-import-data-from-web
[ vojvoda1010 @ 14.01.2016. 16:07 ] @
Microsoft Office Excel 97-2003 Worksheet (.xls) format.
Da li bi mogao snimiti macro da ga okacis?
Uspem da ga snimim ali nista ne reaguje, a sad mi je pokazivao I error za patch name.
Treba samo da promenim patch name?
Da li treba ja da otvaram dodatne sheet-ove? U folderu imam deset workbooks-a
[ vojvoda1010 @ 14.01.2016. 17:02 ] @
I da, da li sheet mora biti tog imena ili sheet moze biti imenovan "radno", "radno2" itd ili drugacije imena, ovo su imena sheet-ova koji se ubacuju?
[ vojvoda1010 @ 15.01.2016. 12:43 ] @
Ovako sam uradio otvorio alt+f11,dvoklik na this workbook ubacio kod,zamenio path,i pokusao da snimim na f5 i karticu save i pokazuje gresku compile error:cant assign to read-only propertly, i obelezen je zutom bojom prvi red a na drugi pokazuje strelicu i ovo prethodno pise
[ Jpeca @ 15.01.2016. 13:58 ] @
Gornji kod nije vezan za događaje radne sveske, dodaješ ga u poseban modul. Ako imaš nameru da radiš sa VBA probaj da nađeš neku literaturu i proučiš malo.

Možeš da počneš od ove teme
http://www.elitesecurity.org/t222802-Office-Rad-sa-makroima
i
http://www.elitesecurity.org/t390785-excel-vba

Što se tiče podpitanja, mogu listovi da se nazovu kako god hoćeš. Copy radi kopiju pod postojećim imenom - a da zameniš ime aktivnom listu:
ActiveSheet.Name = "KakoTrebaDaSeZove"
[ vojvoda1010 @ 15.01.2016. 14:45 ] @
Uradio sam po prvom linku kopirao snimi i jedino nisam nasao tools pa macro pa ono trece nisam nasao. Koristim e2003 security je na medium a fajlovi su xls. Prpbao sam da zatvorim workbook ppkrenem ponovo pa ide macro prihvatim i on otvori praznu sa tri prazna sheeta. Prilog kako sam uradio.
[ Jpeca @ 15.01.2016. 15:07 ] @
U oba primera imaš backslash "\" na kraju promenljive Path.

Ovakvi i slični problemi su uobičajeni prilikom pisanja koda pa je bitno da se upoznaš kako de debaguješ kod i vidiš u čemu je problem
Kratko o debagovanju
video
[ vojvoda1010 @ 15.01.2016. 16:12 ] @
Hvala na pomoci i smernicama. Dodao sam u path \ na kraju ime foldera i pritusnuo f5 i poceo je da otvara. Kao sto si ti naveo nidio mi da snimim workbook koji ubaci
[ vojvoda1010 @ 17.01.2016. 00:26 ] @
Da li bi moglo dobiti sheetove iz aktivnih workbookova u jedan workbook?
[ Ivek33 @ 17.01.2016. 08:46 ] @
Pogledaj primjere koda

- RDBMerge, Excel Merge Add-in for Excel for Windows
- Merging Data from Multiple Workbooks into a Summary Workbook in Excel
- combine multiple Worksheet from opened Workbook to one summary workbook
[ vojvoda1010 @ 17.01.2016. 09:50 ] @
Hvala na odgovoru.
Imam jedan problem u kodovima sto sam gledao. U pitanju je path probacu sto bolje potanje da postavim da li path mora boti u c i u temp ili moze d i bilo koja sveska? Da li path je folder ili excel dokument? Ako ke excel dokument fa li je zatvoren ili je otvoren i da li se u njega stavlja kod ili u neki drugi?" Uspeo sam" jednom sa nekim kodom i sve mi je zatvorio otvorene nije prebacio u test excel dokument. Stavicu kod ako treba koji sam koristio
[ vojvoda1010 @ 17.01.2016. 10:25 ] @
Evo koda u prilogu sad mislim da on kopira samo jedqn aktivan a da li moze vise i sta sa path uraditi?
[ Ivek33 @ 17.01.2016. 17:20 ] @
Citat:
vojvoda1010:Da li path je folder ili excel dokument?
Teško je raditi kada čovjek nije ovladao osnovama.
Laički rečeno, Path staza ili "putanja" je smjernica programu da "zna" gdje će potražiti lokaciju u kojoj se nalaze specifične datoteke ili u koju će snimiti određene datoteke. npr: (C:\Temp)

U attach ZIP datoteci nalazi se nekoliko XLS datoteka. Kada je raspakiraš na C particiju dobit ćeš dva foldera
- C:\Temp
- C:\Tmp

U prvom folderu nalaze se datoteke iz kojih kopiraš svaki Sheet1 u master.xls
U drugom folderu nalazi se master.xls datoteka u koju kopiraš sve Sheet1 iz navedenih datoteka sa lokacije ili "Path" C:\Temp
Nakon što raspakiraš ove foldere otvori workbook master.xls iz foldera "Tmp". Nakon pokretanja VBA makronaredbe, Excel će kopirati svaki Sheet1 iz svih datoteka *.xls koje se nalaze u folderu "Temp"
Dakle otvorit će svaku datoteku/kopirati Sheet1/zatvoriti datoteku.
Ovdje je važno da datoteka master.xls nije u istom folderu kao i datoteka iz kojih povlačiš radne listove (Sheet1)

VBA code koji je korišten je slijedeći (nalazi se u Module1 datoteke master.xls)
Da se razumijemo, ja vjerujem da postoji jednostavniji i bolji/brži VBA code ali ovo je od mene dovoljno. Na netu ima puno primjera
Code:
Option Explicit

Sub KopirajSheet1IzDatoteka()
    Dim myDir As String, fn As String
    myDir = "C:\Temp" 'path staza ili putanja do lokacije foldera u kojem se nalaze datoteke
    fn = Dir(myDir & "\*.xls") 'extenzija za datoteke iz kojih se kopiraju Sheets
    Do While fn <> ""
        With Workbooks.Open(myDir & "\" & fn)
            With .Sheets("Sheet1") 'Sheet koji se zeli kopirati iz datoteka
                .Name = "" & fn & "" 'naziv kopiranog sheeta je tipa ime.xls
                '.Name = "(" & fn & ")" 'naziv kopiranog sheeta je tipa (ime.xls)
                '.Name = .Name & "(" & fn & ")" 'naziv sheeta je tipa Sheet1(ime.xls)
                .Copy After:=ThisWorkbook.Sheets(1)
            End With
            .Close False
        End With
        fn = Dir
    Loop
End Sub


BTW: Ako uopće možeš, prakticiraj da postaviš primjer što i kako radiš (ovako je ponekada teško uopće razumjeti što želiš?)
Pogledaj kako ja tebi postavim primjere. To govorim zbog tebe, prije će ti netko pomoći ako ima smislen primjer nego dešifrirtati tvoje pitanje (bez uvrede).

Također pogledaj
Copy sheets in every open workbook to a master workbook
Citat:
This macro copies all sheets in all open workbooks to a master workbook.
Code:
Sub CopySheetsToMasterWorkbook()
Dim WBN As Workbook, WB As Workbook
Dim SHT As Worksheet
Set WBN = Workbooks.Add
For Each WB In Application.Workbooks
If WB.Name <> WBN.Name Then
For Each SHT In WB.Worksheets
SHT.Copy After:=WBN.Sheets(WBN.Worksheets.Count)
Next SHT
End If
Next WB
Application.DisplayAlerts = False
WBN.Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Delete
WBN.Application.DisplayAlerts = True
End Sub

[ vojvoda1010 @ 17.01.2016. 23:57 ] @
Hvala Ivek33 na detaljnom odgovoru,objasnjenju i primeru. Potrudicu se da sto preciznija potanja i primere postavljam.
u ovom slucaju mi je potreban ovaj drugi kod ali ppkazuje gresku run timeerror 13 type mismatch kod 7 reda
[ Ivek33 @ 18.01.2016. 09:29 ] @
Ja ti dao primjere sa prvim kodom a ti zapeo baš za drugi kod :)
Taj drugi kod sam ti dao samo kao smjernicu i link do tutorijala. Tamo si imao primjer datoteke za download.

Kao prvo ne znam zašto ti javlja grešku (ja nisam programer u VBA)
No dobro evo datoteka i sa drugim kodom

U master sheet nalazi se VBA kod (tri vba buttona). Nadam se da ćeš sve skužiti

Button 1
Code:
Option Explicit

Sub CopySheetsToNewWorkbooks()
'kopira svaki sheet iz master wbk kao novu workbook
Dim SHT As Worksheet
For Each SHT In ActiveWorkbook.Worksheets
    SHT.Copy
Next
End Sub

Button 2
Code:
'Option Explicit
Sub CopySelectedSheetsToNewWorkbooks()
'kopira selektirane sheets iz master wbk kao novu workbook
Dim WB As Workbook
Dim AW As Window

Set AW = ActiveWindow
For Each SHT In AW.SelectedSheets
    Set TempWindow = AW.NewWindow
    SHT.Copy
    TempWindow.Close
Next
End Sub

Button 3
Code:
Option Explicit
Sub CopySheetsToMasterWorkbook()
'kopira navedene sheets iz svih otvorenih workbook u jednu novu workbook
Dim WBN As Workbook, WBC As Workbook, WB As Workbook
Dim WS As String
Dim SHT As Worksheet

Set WBN = Workbooks.Add
For Each WB In Application.Workbooks
    If WB.Name <> WBN.Name Then
        For Each SHT In WB.Worksheets
            SHT.Copy After:=WBN.Sheets(WBN.Worksheets.Count)
            WBN.Sheets(WBN.Worksheets.Count).Name = Left(WB.Name, 30 - Len(SHT.Name)) & "-" & SHT.Name
        Next SHT
    End If
Next WB
Application.DisplayAlerts = False
WBN.Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Delete
WBN.Application.DisplayAlerts = True
End Sub
[ vojvoda1010 @ 18.01.2016. 15:25 ] @
Hvala Ivek33 radi, I to bas taj kod, ali opet kod njega imam problema, pitanje: da li on moze da kopira novo otvorene workbooks, ja sam probao ali nece?
[ Ivek33 @ 18.01.2016. 21:21 ] @
Citat:
vojvoda1010:ja sam probao ali nece?
Ako si probao i neće znači da ne može. Dakle imaš novu situaciju
1. doraditi dotični VBA kod
2. pronaći drugi VBA kod
3. eventualno, prvo snimiti sve novootvorene WBK bilo manualno ili preko VBA pa tek onda kopirati sheets

U biti ovo zadnje znači da u module staviš VBA kod koji će snimiti sve otvorene WBK a o tome smo mislim već pričali u nekoj od prethodnih tema.
Ovu VBA proceduru za snimanje pozoveš prije izvršavanja VBA koda za kopiranje

nešto kao
Code:
Sub Odradi()
Snimanje
Kopiranje
End Sub

Sub Snimanje()
....
....
End Sub

Sub Kopiranje()
...
...
End Sub

Dakle, pozoveš samo prvu i ona odradi ostalo. Na tebi je da prihvatiš lokaciju za snimanje.
[ vojvoda1010 @ 18.01.2016. 21:55 ] @
Hvala na odgovoru. Imam jedno pitanje tvoj savet pod 3 ako sam razumeo moguce je preko koda snimiti sve novootvorene workbooks? Taj kod sam trazio ali nisam nasao.
[ Ivek33 @ 19.01.2016. 08:50 ] @
Citat:
vojvoda1010: Taj kod sam trazio ali nisam nasao.
Vidi pomaže li ti ovaj kod
Code:
Sub SaveUnsavedWBK()
'snimanje svih novootvorenih workbook koje nisu nikada snimljene
Dim wb As Workbook 'varijabla za wbk
    Path = "C:\Temp\" 'putanja tj. lokacija gdje Excel snima datoteke
    For Each wb In Workbooks
        If wb.Name <> ThisWorkbook.Name Then
            wb.SaveAs Filename:=Path & wb.Name, FileFormat:=56 'format snimljene datoteke
           'wb.Close False ako želiš zatvoriti wbk nakon snimanja
        End If
    Next wb
    'ThisWorkbook.Close False 'zatvara master wbk u kojoj se nalazi VBA kod
End Sub
[ vojvoda1010 @ 19.01.2016. 10:53 ] @
Prijavljue mi gresku run-time error 1004 u 6 redu wb.save as filename
jel moze vise novootvorenih wb da snimi
[ Ivek33 @ 19.01.2016. 11:05 ] @
Citat:
vojvoda1010: Prijavljue mi gresku run-time error 1004 u 6 redu wb.save as filename
Postavi na vrh naredbu sa apostrofom
Code:
'Option Explicit

Citat:
vojvoda1010:jel moze vise novootvorenih wb da snimi
Probaj

btw:
U master wbk nalazi vba kod sa VBA buttonom

Isprobano: Otvorene su 3 wbk koje nisu snimljene (book1, book2, book3)
Klikom na VBA button događa se slijedeće
Sve novootvorene wbk snimljene su u C:Temp sa istim nazivom i extenzijom *.xls
[ vojvoda1010 @ 19.01.2016. 12:36 ] @
Opet isto opet istu gresku mi je ponovio
[ vojvoda1010 @ 19.01.2016. 13:34 ] @
Uspelo. Nekako sam ubacio gresku ona je bila kod file gprmat umesto 56 stavlja se xlNormal. Ali javio mi se novi problem za koji cu otvpriti novu temu.