Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[Excel] Macro za poziv vrednosti celija iz vise Sheets

[es] :: Office :: Excel :: [Excel] Macro za poziv vrednosti celija iz vise Sheets

[ Pregleda: 8135 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

stefann127
Stefanovic Nebojsa
ITS
Beograd

Član broj: 55741
Poruke: 91
*.yubc.net.



Profil

icon [Excel] Macro za poziv vrednosti celija iz vise Sheets15.08.2007. u 20:56 - pre 203 meseci
halo znalci,

pomozite mi molim vas oko makroa.

U pitanju je sledece.

Do sada sam imao sledece :u 10 identicnih .xls fajlova bio je samo jedan Worksheet zvao se TI, sa popunjenim brojnim vrednostima, protectovan i Workbook i Worksheets.U root C smesteni fajlovi.
U novom fajlu koji je imao isti worksheet TI, sam trebao sabrati vrednosti u celijama napr.A59 (vidite Code), takodje protect i Workbook i Worksheets i to je ferceralo .

Sada imam sledecu situaciju:

Novi protect .xls fajl ima 4 Worksheets PL, KF, TI i OS.(redom su navedeni Sheets kao 1..4)
Takodje zelim sabrati vrednosti recimo iz Sheet TI isto A59,zatim iz Sheet KF zelim sabrati D10:H20
(ovaj put svuda gde je bilo (0-19) sada treba da stoji (0-54)).

Treba mi pomoc oko toga, gde se u Code ispravljaju brojevi kada se poziva Workbook i Worksheets?
Ovaj Code sada ne moze funkcionisati, jer je ranije TI bio Sheets (1), a sada je TI Sheets (3) te je potrebno ispravno pozvati Workbook i Worksheets.
Gledao sam i citao kako se poziva odredjeni Workbook i Worksheets iz VBA, ali mi ne ide jednostavno (redovi 18, 29 i 35).

Neko mi moze sigurno sa ulozenim trudom pomoci i ustedeti skoro sate koje sam proveo menjajuci vrednosti za Workbook i Worksheets.
Ujedno se na kraju prikaze Msg Box koliko je izbrojano fajlova.


Code:


Sub ti()
Dim a(0 To 19) As Double
Dim rezultat(0 To 19) As Double
Dim BrojCelije As Long
Dim Brojac As Long
Dim NemaFajlova As Boolean
Dim celija As Range
Dim celijasve As Range
Brojac = 0
For BrojCelije = 0 To 19
rezultat(BrojCelije) = 0
Next BrojCelije
Do Until NemaFajlova = True
DoEvents
BrojCelije = 0
Brojac = Brojac + 1
Excel.Workbooks.Open ("C:\ti" & Brojac & ".xls")
For Each celija In Workbooks(2).Worksheets(1).Range("A5:D9")
If InStr(1, celija.Formula, "SUM") = 0 And celija.AllowEdit = True Then
a(BrojCelije) = celija.Value
rezultat(BrojCelije) = rezultat(BrojCelije) + a(BrojCelije)
BrojCelije = BrojCelije + 1
End If
Next celija
Excel.Workbooks(2).Close
If Dir("C:\ti" & Brojac + 1 & ".xls") = "" Then NemaFajlova = True
Loop
BrojCelije = 0
For Each celijasve In Workbooks(1).Worksheets(1).Range("A5:D9")
If InStr(1, celijasve.Formula, "SUM") = 0 And celijasve.AllowEdit = True Then
celijasve.Value = rezultat(BrojCelije)
BrojCelije = BrojCelije + 1
End If
Next celijasve
Excel.Workbooks(1).Save
MsgBox "Broj sabranih fajlova je " & Brojac
End Sub



Hvala unapred
 
Odgovor na temu

3okc
Χoᴘᴦoѡ

Moderator
Član broj: 811
Poruke: 1319

Jabber: 3okc@elitesecurity.org


+116 Profil

icon Re: [Excel] Macro za poziv vrednosti celija iz vise Sheets16.08.2007. u 09:33 - pre 203 meseci
Pa da pokušam, ali bez namere da se preterano udubljujem u makro, vrlo ti je nečitak kod ovako bez uvlačenja redova.

Koliko sam razumeo, makro bi trebalo da sabere "10 identičnih .xls fajlova"; identično se, valjda, odnosi na format ćelija kao i relativni (apsolutni) raspored ćelija sa različitim podacima. Vidi, ako je to tako, onda zašto ne utrošiš delić vremena koji si do sada potrošio na pisanje i debagovanje, na proučavanje Excel-ovog alata Data Consolidation koji je upravo za to namenjen.
Citat:
Gledao sam i citao kako se poziva odredjeni Workbook i Worksheets iz VBA, ali mi ne ide jednostavno (redovi 18, 29 i 35).

Čekaj, kod koji si postovao nema numerisane redove; ili, treba sad da brojimo do 35?! tz,tz,tz

Za ovo što pitaš, u kodu si pristupio kolekciji Worksheets preko rednog broja, tj indeksa. Ovaj pristup nosi mogućnost greške ako se u toku rada neki radni list obriše, i/ili doda nov pa premesti na neku nama logičnu poziciju (pri tom ignorišući redni broj koji je list dobio), odnosno, da ne znaš, zapravo kom listu pristupaš (liči na tvoj problem).

Problem se može prevazići referenciranjem preko imena, što je drugi način. Znači, mogao bi da kreiraš konstante u vrhu makroa sa imenima koje ćeš koristiti u kodu, ili, ako ti treba pristup iz petlje, možeš kreirati niz koji će se, onda, popunjavati pri startovanju.

Sledeći primer ti ujedno demonstrira oba pristupa a možeš ga upotrebiti i da testiraš dodeljene redne brojeve svojih radnih listova. Naravno, u navodnike je potrebno navesti ime koje si ti dodelio, inače ćeš dobiti grešku.
Code:

    ' test() šalje podatke u Immediate window VBE-a, CTRL+G
Sub test()

    Debug.Print Sheets(1).Name & " ima indeks " & Sheets("Sheet1").Index
    Debug.Print Sheets(2).Name & " ima indeks " & Sheets("Sheet2").Index
    ' itd
End Sub

Pogledaj i ove primere:
Referencing Worksheet From Formulas http://www.cpearson.com/excel/sheetref.htm
Collection Indexes http://www.cpearson.com/excel/optimize.htm
Have you found helpful examples, solutions or ideas-in-work, please consider the
following:
• Citation of *actual page* you are going to using is welcome.
• Have you saw "Value Added" examples you are going to incorporate to your
profitable blog, daily job or any money making venture: How about online donation?
↗Ana & Vlade Divac Foundation
Hvala!
 
Odgovor na temu

stefann127
Stefanovic Nebojsa
ITS
Beograd

Član broj: 55741
Poruke: 91
*.yubc.net.



Profil

icon Re: [Excel] Macro za poziv vrednosti celija iz vise Sheets16.08.2007. u 11:20 - pre 203 meseci
hi 3okc,


razumljivo je da su fajlovi identicni po formi, a ne po vrednostima u njima.OK! Izvini.

Kada sam naveo brojeve redova, takodje izvini, ja sam ih brojao a to su inace redovi :


For Each celija In Workbooks(2).Worksheets(1).Range("A5:D9")...
...
For Each celijasve In Workbooks(1).Worksheets(1).Range("A5:D9")
...i
Excel.Workbooks(1).Save

U pravu si i za referenciranje Sheets.

Ostalo mi je nejasno kako Workbook referencirati?veruj mi.

Kada sam promenio u Code broj Worksheets na 3 , ono boldirano , tj. pozvao treci Sheets sada je to isto naziv TI, sabirao mi je neke nebuloze, koje uopste nisu tacne.

Pretpostavljam da samo u ova dva boldirana trebam promeniti broj Sheet u navedenim redovima ispravno, ali negde gresim.

Hvala ti na ukazanim greskama i strpljenju.
Ako ti nije problem razmotri gde gresim, jedino sam to menjao u Code koji radi divota, kada postoji samo jedan Sheet.

Hvala jos jednom.


PS. E da, u vezi Data Consolidation samo ovo da ti napisem i pitam.
Worksheets i Workbook su protektovani i to samo neki unutar matrice A5:D9, tako da se zahteva nakon referenciranja Unprotect, nisam siguran da bi ovo pomoglo.

Pozz.

[Ovu poruku je menjao stefann127 dana 16.08.2007. u 14:07 GMT+1]
 
Odgovor na temu

3okc
Χoᴘᴦoѡ

Moderator
Član broj: 811
Poruke: 1319

Jabber: 3okc@elitesecurity.org


+116 Profil

icon Re: [Excel] Macro za poziv vrednosti celija iz vise Sheets16.08.2007. u 23:11 - pre 202 meseci
Sad vidim da je kod koji sam ti ostavio ilustracije radi, malo neprecizan pa da ispravim to odmah.
Znači, očitavamo dva puta objekat Sheets ali mu jednom pristupamo preko indeksa a drugi put preko imena. Da bismo bili sigurni da uvek pristupamo ISTOM objektu, kod bi trebalo da izgleda ovako:
Code:

    ' test() šalje podatke u Immediate window VBE-a, CTRL+G
Sub test()

    Debug.Print Sheets(1).Name & " ima indeks " & Sheets(Sheets(1).Name).Index
    Debug.Print Sheets(2).Name & " ima indeks " & Sheets(Sheets(2).Name).Index
    Debug.Print Sheets(3).Name & " ima indeks " & Sheets(Sheets(3).Name).Index
    Debug.Print Sheets(4).Name & " ima indeks " & Sheets(Sheets(4).Name).Index
    Debug.Print Sheets(5).Name & " ima indeks " & Sheets(Sheets(5).Name).Index
    Debug.Print Sheets(6).Name & " ima indeks " & Sheets(Sheets(6).Name).Index
    ' itd
End Sub

To je za zamišljeni dokument sa 6 radnih listova. Pretpostavimo da su poređani kao na slici dole. Kada pokrenemo test(), na izlazu dobijemo:
Code:

Sheet3 ima indeks 1
Sheet4 ima indeks 2
Sheet5 ima indeks 3
Sheet7 ima indeks 4
Sheet6 ima indeks 5
Sheet2 ima indeks 6

Naravno, kod se može uvući u petlju da bismo ga učinili čitljivijim. Za to možeš koristiti eksplicitno referenciranje pa će ti trebati i podatak o broju članova u kolekciji (to je uvek metod Count, znači, u ovom slučaju Sheets.Count), a možeš implicitno preko For Each petlje koja će proći kroz sve objekte u kolekciji.

Sve prethodno navedeno, odnosi se jednako i na objekat Workbooks. Ne znam šta ti nije jasno, prosto preslikaj sve što sam do sada napisao na njega i – treniraj. Poigraj se, vidi šta ćeš dobiti kad očitaš svojstva. Čitaj HELP!!! Vežbaj primere koji su postavljeni u HELP-u.

Jedna važna napomena: Primer koji sam ti dao koristi kolekciju objekata Sheets, za razliku od tvog makroa koji radi sa Worksheets. Ovo sam učinio da bi bilo lakše čitati iz koda ali vodi računa da to nije isto. Kada se navede Sheets bez pripadajućeg roditeljskog objekta, podrazumeva se aktivna radna sveska tako da ovaj način nikako ne bi smeo da koristiš kad iz makroa otvaraš nekoliko svesaka.
Citat:
Kada sam promenio u Code broj Worksheets na 3 , ono boldirano , tj. pozvao treci Sheets sada je to isto naziv TI, sabirao mi je neke nebuloze, koje uopste nisu tacne.

Zaista ne mogu da dokučim šta ne valja, moraćeš sam. Postavi Break Point na to mesto u kodu i kad makro dođe do problematičnog dela, zaustaviće se, pa očitaj vrednosti svim veličinama koje koristiš preko Immidiate Window-a. Drugo ti ne mogu reći (ja bih tako radio).
Citat:
PS. E da, u vezi Data Consolidation samo ovo da ti napisem i pitam.
Worksheets i Workbook su protektovani i to samo neki unutar matrice A5:D9, tako da se zahteva nakon referenciranja Unprotect, nisam siguran da bi ovo pomoglo.

Ne razumem šta me pitaš.

Jesi li uopšte pokušao da koristiš ili unapred "nisi siguran da bi ovo pomoglo"?
Pošto je za sabiranje potrebno samo očitati vrednost ne vidim kako bi zaključana ćelija mogla da zasmeta?

Ali ok, radi na svom makrou, možda je tako brže.

Have you found helpful examples, solutions or ideas-in-work, please consider the
following:
• Citation of *actual page* you are going to using is welcome.
• Have you saw "Value Added" examples you are going to incorporate to your
profitable blog, daily job or any money making venture: How about online donation?
↗Ana & Vlade Divac Foundation
Hvala!
Prikačeni fajlovi
 
Odgovor na temu

stefann127
Stefanovic Nebojsa
ITS
Beograd

Član broj: 55741
Poruke: 91
*.83.beocity.net.



Profil

icon Re: [Excel] Macro za poziv vrednosti celija iz vise Sheets17.08.2007. u 20:28 - pre 202 meseci
pozdrav 3okc,


najpre da ti javim da sam probao Consolidate i da na Protect Worksheet ne funkcionise, vec najpre izbaci upozorenje da treba Unprotect.
Probao sam na proizvoljnom primeru Consolidate funkcionise i hvala ti za tu preporuku.

Primecujem da mi ne preporucujes bas rad sa macroom koji sam prilozio, ali kazem ti da kada posotoji samo 1 Sheet odlicno Funkcionise.

Probao sam izmenom boldiranog i zapocne funkcionisanje, ali na kraju se pokaze MsgBox da je prosao kroz 10 fajlova, ali rezultat sabiranja ne prikazuje.Mozda ti ovo moze ukazati na nesto.
Ako mislis da ces "prokuziti" javi mi.

I kao napomena da je u svakom od 10 fajlova koje zelim otvoriti i sabrati vrednosti u Cells A5:D9 aktivan onaj Sheet koji mi treba, u ovom slucaju to je Sheet 3 TI.

Unapred ti hvala.


For Each celija In Workbooks(2).Worksheets(1).Range("A5:D9")...
...
For Each celijasve In Workbooks(1).Worksheets(3)[]/b.Range("A5:D9")
...i
Excel.Workbooks(1).Save


Pokusao sam da izmenama boldiranih Sheet dobijem nesto, ali nije islo.

Pozdrav
 
Odgovor na temu

Brz_na_tastaturi
Svilajnac

Član broj: 63852
Poruke: 318
91.150.111.*



+1 Profil

icon Re: [Excel] Macro za poziv vrednosti celija iz vise Sheets18.08.2007. u 23:03 - pre 202 meseci
Meni se čini da si ti tu nešto nepotrebno zakomplikovao, mislim da taj kod može da bude mnogo jednostavniji.

Koliko sam uspeo da razumem imaš 10 excel dokumenata (Workbooks) sa po 4 radna lista (Worksheets) koji se nalaze na c:\ (što baš ne liči na dobru organizaciju jer nije pregledno gomilanje fajlova na rootu particije osim ako nemaš neki jak razlog za to), koji su identični po strukturi i iz kojih sabiraš podatke.

Ono što nisam razumeo (ili nisam video da piše u tvojim postovima) je:
1. Šta podrazumevaš pod "protectovan i Workbook i Worksheets", treba li lozinka da se otvori dokument u kome su podaci?
2. Da li se podaci sabiraju u novi dokument ili se samo osvežava stanje u već postojećem i kako se zove taj dokument?
3. Da li tu imaš još excel fajlova koji se ne koriste u izračunavanju, ako ima kako idu nazivi fajlova koje treba sabirati?

Možda je tačno da je sve već rečeno, samo nisu svi sve čuli i razumeli ...
 
Odgovor na temu

stefann127
Stefanovic Nebojsa
ITS
Beograd

Član broj: 55741
Poruke: 91
*.yubc.net.



Profil

icon Re: [Excel] Macro za poziv vrednosti celija iz vise Sheets20.08.2007. u 18:35 - pre 202 meseci
Halo Brzi,

evo ponovicu:

Imam 10 .xls fajlova, sa 4 potpuno ista Sheeta Sheet1 PL, Sheet2 KF, Sheet 3TI i Sheet4 OS.
Sve tabele u Sheetovima PL su identicne (ali razlicite od ostala tri Sheetova).
Sve tabele u Sheetovima KF su identicne (ali razlicite od ostala tri Sheetova).....nadam se da je jasno.

U sheet PL kao i u ostalim Sheet mogu se unositi samo brojne vrednosti u odredjenim celijama, dok su odredjeni redovi medjuzbirovi i Protect je i Worksheet i Workbook i ne smem da Unprotectujem te sumarne celije u redovima.
Isto vazi i za ostale Sheet, znaci Fromat Cells Protection Locked je cekirano.
Da li sam nesto pogresio????
Code koji sam uz pomoc bravuroznih kolega sa es dobio je radio i fercera, ali samo pod jednim uslovom, a to je da Workbook ima samo 1 (jedan)Sheet, ime je TI, isto su medjuzbirovi Protect tj. ne moze se unositi vrednost

Zatim otvaram identican .xls fajl sa istim worksheet, u kome su sve prazne celije tj. =0

Sada mi je problem nastao sto u Code trebam ispravno prozvati Sheet najpre PL, pa Sheet TI, pa Sheet OS, ucitati broj iz jednog fajla i sabirati sa sledecim vrednostima potpuno iste celije drugog, treceg i tako do 10 fajla.
Na kraju se taj zbir upise u celije koje sadrze brojne vrednosti i prikaze koliko je fajlova sabrano.

Normalno da fajlovi nisu u root, C:\, samo sam naveo radi lakse putanje.

Dakle ove redove iz Code

Excel.Workbooks.Open ("C:\ti" & Brojac & ".xls")
For Each celija In Workbooks(2).Worksheets(1).Range("A5:D9")
...
....
Excel.Workbooks(2).Close
...
For Each celijasve In Workbooks(1).Worksheets(1).Range("A5:D9")
...
Excel.Workbooks(1).Save


Treba promeniti u Code brojeve pozvanih, otvorenih i zatvorenih Workbook i Worksheeta, ali tako, da jedanput upisuje zbir u Sheet PL, sledeci put u TI , ...
Probao sam da promenim brojeve iza Worksheet, ali je dobijena bezvezna suma.

Pokusaj mi pomoci,

Radio sam za ovo vreme i Consolidate, ide, ali mi je dosta vremena trebalo da popunim references.

Poslao bih ti .zip ali ima 810 kB za 6 fajlova.

Nadam se da sam razjasnio.

Hvala ti unapred, nisam verovao da je takav problem kako potvoriti zeljeni Sheet uzeti vrednost , zatvoriti fajl i upisati u isti Sheet u poseban fajl.

Pozx




 
Odgovor na temu

Brz_na_tastaturi
Svilajnac

Član broj: 63852
Poruke: 318
77.46.253.*



+1 Profil

icon Re: [Excel] Macro za poziv vrednosti celija iz vise Sheets28.08.2007. u 17:33 - pre 202 meseci
Citat:
stefann127: Halo Brzi,

evo ponovicu:

Imam ....

Hvala ti unapred, nisam verovao da je takav problem kako potvoriti zeljeni Sheet uzeti vrednost , zatvoriti fajl i upisati u isti Sheet u poseban fajl.

Pozx


Tako sam otprilike i razumeo, ali ne vredi da ponavljaš, ja dok nešto ne vidim teško ide
I nije to tako veliki problem kako tebi izgleda.
Postavi primer i videćeš.
Možda je tačno da je sve već rečeno, samo nisu svi sve čuli i razumeli ...
 
Odgovor na temu

stefann127
Stefanovic Nebojsa
ITS
Beograd

Član broj: 55741
Poruke: 91
195.222.97.*



Profil

icon Re: [Excel] Macro za poziv vrednosti celija iz vise Sheets03.09.2007. u 10:28 - pre 202 meseci
Brzi,


saljem ti fajl sa samo dva Sheeta.original ima 4, ali sam izbrisao zbog velicine fajla.


Code koji sam poslao dakle funkcionise samo kada u fajlu postoji 1 Sheet.
U ovom slucaju, kada postoji 4 Sheeta ne biva.

Molio bih te da pokusas da mi ukazes gde treba promeniti u Code , da bi mi sabralo kao sto sam ovde prilozio u Sheetu PLATE.

Pozdrav


PS.

Pokusao sam i Consolidate, uneo sva polja ispravno, sve Sheetove, ali je izvrsena Consolidacija totalno pogresna.
Nije moguce da sam negde pogresio.
Saljem i fajl os Consolidate.xls, pa proveri.
Imena fajlova za Consolidate su su1, su2, su3.....
[Ovu poruku je menjao stefann127 dana 03.09.2007. u 11:51 GMT+1]

[Ovu poruku je menjao stefann127 dana 03.09.2007. u 11:53 GMT+1]
Prikačeni fajlovi
 
Odgovor na temu

Brz_na_tastaturi
Svilajnac

Član broj: 63852
Poruke: 318
77.46.195.*



+1 Profil

icon Re: [Excel] Macro za poziv vrednosti celija iz vise Sheets06.09.2007. u 21:53 - pre 202 meseci
Za ove fajlove sa dva radna lista ja bih to ovako rešio, slično je i za više listova samo treba dodati još malo koda.
Iskopiraj ovaj fajl tamo gde su ti fajlovi sa podacima i pokreni makro 'sastavi'.
Možda je tačno da je sve već rečeno, samo nisu svi sve čuli i razumeli ...
Prikačeni fajlovi
 
Odgovor na temu

[es] :: Office :: Excel :: [Excel] Macro za poziv vrednosti celija iz vise Sheets

[ Pregleda: 8135 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.