seštevanje podatkov iz več delovnih zvezkov

Pomoč pri delu z MS Excelom
rick
Prispevkov: 216
Pridružen: So Feb 17, 2007 9:18 pm

seštevanje podatkov iz več delovnih zvezkov

Odgovor Napisal/-a rick »

pozdravljeni :)

v mapi imam zvezke od januarja do decembra.v vseh teh zvezkih so enake tabele z različnimi podatki.zanima me,kako bi v nov delovni zvezek
seštel vse te podatke.poznam klasičen postopek - s povezavami,pa me zanima,če obstaja kaj bolj elegantnega in hitrejšega,recimo z makrojem.
za odgovor se zahvaljujem.

lp rick
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

:):) Seveda obstaja način z makrom. Z makrom lahko naredite popolnoma vse, kar lahko naredite "ročno"... samo napisati je potrebno makro ;)

Nekaj podobnega imate recimo tukajle: viewtopic.php?t=151&highlight=dir
lp,
Matjaž Prtenjak
Administrator
rick
Prispevkov: 216
Pridružen: So Feb 17, 2007 9:18 pm

Odgovor Napisal/-a rick »

pozdravljeni :)

najprej hvala za odgovor
hmm,ogledal sem si kodo:

Koda: Izberi vse

Sub ZdruziDatoteke() 
    Dim Mapa As String 
    Mapa = "c:\help\test" 
    
    Dim NovaDatoteka As Workbook 
    Set NovaDatoteka = Workbooks.Add 
    
    Dim datoteka 
    datoteka = Dir(Mapa & "\*.xls") 
    Do While datoteka <> "" 
        Dim wb 
        Set wb = Workbooks.Open(datoteka) 
        Sheets.Copy before:=NovaDatoteka.Sheets(1) 
        wb.Close 
        
        datoteka = Dir 
    Loop 
End Sub
moram priznati,da tega makra ne razumem,niti nevem kaj pomeni "zdruzidatoteke",a je to seštevanje nali morda vsi listi v enem zvezku?
no,da ne bom kompliciral,jaz bi si želel sledeče:
imam mapo "c:\meseci" v kateri se nahajajo zvezki z enako strukturo.
želel bi sešteti podatke v vseh zvezkih ,ki se nahajajo v celicah a1,a2,a3.....a20

[jan]list1!a1+[feb]list1!a1+......
tako nekako

upam,da moje vprašanje ni pretežko.
za odgovor se najlepše zahvaljujem.

lp rick
BJ
Prispevkov: 170
Pridružen: Sr Okt 26, 2005 5:46 pm

Odgovor Napisal/-a BJ »

Koda: Izberi vse

Sub ZdruziDatoteke()
To je samo ime makra!
LPB
rick
Prispevkov: 216
Pridružen: So Feb 17, 2007 9:18 pm

Odgovor Napisal/-a rick »

pozdravljen

vem ja :) ,vendar me zanima kaj ta makro naredi;kako združi podatke a
jih sešteva ali kaj?

za odgovor se zahvaljujem

lp rick
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Ne ta makro nima nobene zveze s seštevanjem. Ta makro združi liste iz več datotek v eno samo datoteko. Podal sem vam ga kot primer, kako se boste morali problema lotiti.
lp,
Matjaž Prtenjak
Administrator
miha1
Prispevkov: 20
Pridružen: Sr Avg 10, 2005 5:07 pm

Odgovor Napisal/-a miha1 »

pozdravljeni :)

no,že več dni se trudim,pa mi ne rata,da bi združil več delovnih zvezkov
v enega :(

priznam,da nimam veliko pojma kar se tiče makra.......

pravzaprav,bi rad,da mi združi vse delovne zvezke(toda ne vse liste,temveč samo list-e1),ki se nahajajo v zvezkih in v neki mapi na c:\.
obstaja kakšna elegantna rešitev za moj problem?
vesel bom vašega odgovora.

lp rick
lp miha1
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

miha1 napisal/-a:pravzaprav,bi rad,da mi združi vse delovne zvezke(toda ne vse liste,temveč samo list-e1),ki se nahajajo v zvezkih in v neki mapi na c:\.
Natanko to vam naredi omenjeni makro; delovne zvezke pa vzame iz mape, ki jo zapišete v drugo vrstico makra:

Koda: Izberi vse

Mapa = "c:\help\test" 
lp,
Matjaž Prtenjak
Administrator
rick
Prispevkov: 216
Pridružen: So Feb 17, 2007 9:18 pm

Odgovor Napisal/-a rick »

pozdravljen Matjaž

ok, ampak vedno se mi ustavlja pri:

Koda: Izberi vse

Set wb = Workbooks.Open(datoteka)
poleg tega je problem,ker so vsi zvezki odprti.
je možno da bi ostal odprt samo zvezek kjer so listi združeni,ostali zvezki pa bi se zaprli.

za odgovor se najlepše zahvaljujem

lp rick
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Kakšno napako pa Excel javi?

PS: Makro vam vse delovne zvezke za sabo zapre!
lp,
Matjaž Prtenjak
Administrator
rick
Prispevkov: 216
Pridružen: So Feb 17, 2007 9:18 pm

Odgovor Napisal/-a rick »

pozdravljen

hja,smešno,napiše mi,da datoteke *.xls(jan,feb,mar,apr....) ni mogoče najti,preverite ali ste napisali pravo ime datoteke (run-time error 1004).zanimivo,vse te datoteke so v mapi na( Mapa = "C:\test"),vaš makro sem temu primerno popravil,pa se kljub temu ustavlja.kaj delam narobe? :cry:

za odgovor se zahvaljujem


lp rick
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Odgovor Napisal/-a cedra »

Pozdravljeni!

Tudi sam sem preizkusil makro in res se obnaša tako kot je napisal rick. Da pa je makro stvar izvedel, sem pa ga pripravil takole:
V mapi kjer so zvezki, ki naj se združijo, sem odprl prvi zvezek, naj ga poimenujem "Moj zvezek" in nato pognal makro. Seveda se je ustavil kot je bilo že napisano in sem mu v pojavnem oknu ukazal naj se konča izvajanje (End). Zdaj se nahajam v zvezku, ki ga je makro ustvaril. (Zvezek1 oz Book1) Pritisnem na ikono Odpri in v mapi, kjer se nahajajo zvezki za združitev, ponovno odprem "Moj zvezek" in spet poženem makro za združevanje. In zanimivo :shock: , zdaj makro naredi kar mora, brez vsakega problema in pritožb. Ustvari pa to v Zvezek2 oz. Book2. Prav zanimivo! Zdaj pa ostane samo še: "Shrani"!
Me prav zanima rick, če bo tudi vam na ta način uspelo. Poročajte...

P.S. Makro sem imel v osebnem zvezku z makri - (Personal)
lp,

cedra
rick
Prispevkov: 216
Pridružen: So Feb 17, 2007 9:18 pm

Odgovor Napisal/-a rick »

helo cedra :)
najprej ena velika hvala....
sem točno tako naredil.kot ste napisali-precej komplicirano,se strinjate?
ja na koncu so res vsi ti listi v enem zvezku (book2).
res pa je tudi,da meni druži vse liste in ne samo sheet1-e(rabil bi samo list-e1) kot je razvidno iz makra,kar bi se moralo zgoditi,mislim pa,da je tako omeni tudi Matjaž.
seveda bi blo fino,če bi bil makro malo bolj dodelan.
predvidevam,da ste se precej namučili okrog tega,če boste slučajno še kaj naredili okrog tega,bi prosil,da mi to javite.
vesel bom vsakega vašega nadaljnega nasveta.

lp rick :wink:
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Odgovor Napisal/-a cedra »

Zdravo!

Koda: Izberi vse

Sub ZdruziDatoteke()
    Dim Mapa As String
    Mapa = "c:\test"
   
    Dim NovaDatoteka As Workbook
    Set NovaDatoteka = Workbooks.Add
   
    Dim datoteka
    datoteka = Dir(Mapa & "\*.xls")
    Do While datoteka <> ""
        Dim wb
            Set wb = Workbooks.Open(datoteka)
                For i = 1 To Sheets.Count
                If wb.Sheets(i).Name = "Moj list" Then Sheets(i).Copy before:=NovaDatoteka.Sheets(1)
            Next i
        wb.Close
        datoteka = Dir
    Loop
End Sub
No, tole zgornjo kodo sem spravil skupaj.
Spremenite ime (name), lista v kodi, ki ga želite kopirati iz vseh zvezkov, tako kot ga imate poimenovanega vi, (v mojem primeru = "Moj list"! Seveda to velja, če so imena listov, ki jih želite združiti, v vseh zvezkih enaka, vsaj tako sem vas razumel!!!
Makro pa morate pognati tako, kot sem vam opisal v prejšnjem postu.
Upam, da vam bo zdaj uspelo.
lp,

cedra
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

:lol: :lol: Nimam časa preizkusiti vseh makrov, ki jih napišem... Je pa dobro, da se malce trudite tudi sami, tako se največ naučite.

Da pa bi ne bilo potrebno tako telovaditi okoli izvedbe makra, preprosto popravite vrstico, ki je napačna in makro bo deloval tako kot bi moral že na začetku :):

Koda: Izberi vse

' torej namesto vrstice
    Set wb = Workbooks.Open(datoteka)
' napišite
    Set wb = Workbooks.Open(Mapa & "\" & datoteka)
lp,
Matjaž Prtenjak
Administrator
Odgovori