[ 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. 10:16 ] @
[ 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 ] @
[ 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? 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? 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. 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 Code: 'Option Explicit Citat: vojvoda1010:jel moze vise novootvorenih wb da snimi 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.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|