[ noreniou @ 20.04.2005. 15:06 ] @
Ljudi,

svaki ko zna koji put moj početak VB donosi obnavljanje, ali je želja za znanjem drugačija te molim za razumevanje.
Pomozite mi objašnjenjem code za sabiranje istih Cells iz istih Sheets i različitih fajlova i jedan Excel fajl.
Želim da saberem iste ćelije napr. F5 iz Sheets koji su u različitim fajlovima, ali ne unošenjem podataka u funkcionalnu statusnu liniju u Excel-u, već VB code-om.
Ne bih da prebacujem u bazu pa TransferSpreadsheet, mislim da bi VB to brže u Excel ukalkulisao-dakle Update pošto se podaci u Cells periodično menjaju.

Pretpostavljam da će iskusniji programeri objasniti ovo u nekoliko redova i hvala unapred.

Pozdrav prisutnima i posetiocima
[ Shadowed @ 20.04.2005. 15:30 ] @
Potrazi malo po forumu bilo je raznih pitanja o Excel-u.
Imas jedan primer ovde gde mozes videti kako se pristupa Excel dokumentu pa bi trebao lako uvideti kako mozes da postignes to sto ti treba.
[ noreniou @ 20.04.2005. 19:40 ] @
za Shadowed,


hvala ti ali nisam uspeo da nađem ili bar sada ne mogu da vidim gde je to.

Vidim da je u pitanju odgovor na Štampanje izveštaja, ako nisam zalutao...

Izvini pogledaću detaljnije.

Pozdrav i razumi me, to će mi biti dovoljno.
[ Marko_L @ 20.04.2005. 20:24 ] @
Ako sam dobro shvatio, hoćeš da otvoriš dva excel fajla, uzmeš vrednost iz jednog (recimo cell C5), zatim iz drugog (isti cell, dakle C5) i njihov zbir smestiš u treći excel fajl, takođe u cell C5 ? Ako je to, reci, pa da nastavimo dalje, da ne pišem bez veze.
[ noreniou @ 21.04.2005. 08:27 ] @
Marko,

nema druge.

Upravo to sam želeo, ali me je Shadowed uputio na tabelarne kalkulacije koje nisam stigao da pregledam sve.
Dakle preuzmem vrednost napr C5 iz jednog fajla, zatim C5 iz drugog najčešće saberem te dve vrednosti i unesem u C5 u trećem fajlu.
Ali vrednosti mogu kasnije da se izmene, tako da se Update automatski, ali ne bih unosio izraz u statusnu liniju za funkcije u excel, nego pomoću VBA.
Radi se o neklim obrascima u .xls formi iz Ministarstva finansija za budžetske korisnike.
Ne naplaćujem ništa, a može obaviti posao ljudima.

Možemo razmeniti poruke.

Hvala ti unapred

Neka
[ Marko_L @ 21.04.2005. 14:42 ] @
Svakako bi trebalo da pogledaš ono što ti je Shadowed ostavio.Koristiće ti.
Elem, što se tiče ovoga što ti hoćeš, verovatno je najlakše da to odradiš nekako ovako:
Code:
Dim a As Long
Dim b As Long
Dim rezultat As Long
Dim xlapp As Excel.Application
Dim xlbook As Excel.Workbook
Dim xlsheet As Excel.Worksheet
  
Set xlapp = New Excel.Application
Set xlbook = xlapp.Workbooks.Open("C:\Book1.xls")
Set xlsheet = xlbook.Worksheets(1)
a = xlsheet.Cells(5, 3)
Set xlbook = xlapp.Workbooks.Open("C:\Book2.xls")
Set xlsheet = xlbook.Worksheets(1)
b = xlsheet.Cells(5, 3)
rezultat = a + b
Set xlbook = xlapp.Workbooks.Open("C:\Book3.xls")
Set xlsheet = xlbook.Worksheets(1)
xlsheet.Cells(5, 3) = rezultat

Dakle, radi se o cell-u C5.Isti princip je i za ostala polja.

[Ovu poruku je menjao Marko_L dana 21.04.2005. u 16:40 GMT+1]

[Ovu poruku je menjao Marko_L dana 21.04.2005. u 16:44 GMT+1]
[ Shadowed @ 21.04.2005. 15:32 ] @
Nazalost, na racuaru sa kojeg pristupam ES-u imam ogranicene mogucnosti srada sa VB-om pa nisam mogao nista konkretnije da ti napisem (ne mogu da dodajem reference na bilo sta a nisam hteo napamet pa da pogresim negde).
Nadao sam se da ces moci iz onog primera da izvuces bitan deo i iskoristis ali u svakom slucaju to je sa Marko fino sazeo.
[ Marko_L @ 21.04.2005. 15:45 ] @
Zato sam ja pisao napamet i pogrešno deklarisao promenljive :)
Evo sada je ispravljeno.
[ Marko_L @ 21.04.2005. 16:02 ] @
E da, da ne zaboravim, takođe bi po završetku rada sa workbookom trebalo zatvarati ih, a ovaj zadnji u koji se unosi rezultat snimiti.Znači, bolje bi bilo da se kod postavi ovako.
Code:
Dim a As Long
Dim b As Long
Dim rezultat As Long
Dim xlapp As Excel.Application
Dim xlbook As Excel.Workbook
Dim xlsheet As Excel.Worksheet
  
Set xlapp = New Excel.Application
Set xlbook = xlapp.Workbooks.Open("C:\Book1.xls")
Set xlsheet = xlbook.Worksheets(1)
a = xlsheet.Cells(5, 3)
xlbook.Close
Set xlbook = xlapp.Workbooks.Open("C:\Book2.xls")
Set xlsheet = xlbook.Worksheets(1)
b = xlsheet.Cells(5, 3)
xlbook.Close
rezultat = a + b
Set xlbook = xlapp.Workbooks.Open("C:\Book3.xls")
Set xlsheet = xlbook.Worksheets(1)
xlsheet.Cells(5, 3) = rezultat
xlbook.Save
xlbook.Close
Set xlsheet = Nothing
Set xlbook = Nothing
Set xlapp = Nothing
[ noreniou @ 21.04.2005. 19:24 ] @
Marko _L & Shadowed,

Momci,

za sada Vam se zahvaljujem, mnogo i ako Vam se na mašincu nešto može pomoći javite.

Verujem da ću uraditi dosta toga i za praznike, guši me ministarstvo finansija nešto.


Prijatno kišno veče i gledajte punim plućima.

Pozdrav







Od skrivenog blaga i skrivenog znanja NIKAKVE koristi!
[ stefann127 @ 04.05.2005. 11:13 ] @
Za Marka i poznavaoce


Imam još jednu dopunu.
Ako imam slučaj da .xls fajlove sa podacima korisnika u određenim ćelijama koje želim sabrati dobijam na FDD, a želim da brojne vrednosti iz određenih ćelija saberem sa prethodnim u posebnom .xls fajlu sa rezultatima zbira i tako dobijeni rezultat ostane zapisan trenutnim zbirom (koji se kasnije menja kada se učitaju novi podaci sa A:\), da li se zapisom


rezultat = a + b
Set xlbook = xlapp.Workbooks.Open("C:\Book3.xls")
Set xlsheet = xlbook.Worksheets(1)
xlsheet.Cells(5, 3) = rezultat

xlbook.Save

xlbook.Close

čuva svako trenutno stanje zbira ili je potrebno da formiram temp .xls?

Molim te takođe za dopunu brojačem koliko je podataka iz fajlova (određene ćelije)trenutno sabrano u zbiru.

Hvala ti unapred

Pozdrav



Pre bih sa znalcem orao i kopao nego što bih sa Karleušom išao u bioskop!
[ Marko_L @ 06.05.2005. 20:52 ] @
Nisam siguran da sam razumeo šta želiš da postigneš.Hoćeš li da sabereš vrednosti iz neke ćelije i tim zbirom zameniš postojeći zbir u nekom trećem fajlu (u ovom slučaju Book3) ili da na taj postojeći zbir dodaš novi.U prvom slučaju će kod koji si sam postavio završiti posao.A u drugom slučaju samo promeni sledeću liniju
Code:
xlsheet.Cells(5, 3) = rezultat

u
Code:
xlsheet.Cells(5, 3) = xlsheet.Cells(5, 3) + rezultat
[ stefann127 @ 06.05.2005. 21:46 ] @
Marko,

OK je sve, razumeo sam, ali ponoviću ti, pa nakon rezimea ti prokomentariši.
Iz fajla s1.xls , ćelije E3 napr. u prazan fajl ssve.xls u ćeliju E3 čija je početna vrednost 0 dodam E3 iz s1.xls.
Zatim iz fajla s2.xls, ćelije E3 preuzmem broj i saberem sa E3 iz fajla ssve.xls.
(koja sada već sadrži broj iz E3 fajla s1.xls)
Zatim iz fajla s3.xls, ćelije E3 preuzmem broj i saberem sa E3 u fajlu ssve.xls
(koja već sadrži zbir brojeva iz E3 fajla s1.xls i E3 iz fajla s2.xls)

i tako možda iz 20 tak fajlova napr. s20.xls preuzmem brojnu vrednost i saberem sa E3 u fajlu ssve.xls
(koja već sadrži zbir brojeva iz E3 fajla s1.xls do E3 iz fajla s19.xls).

Dobijen je neki zbir, ali bi mi trebao Counter da odredi koliko puta je sabran broj u ćeliji E3 fajla ssve.xls. i pokaže MsgBox "U ćeliji E3 sabrano je ukupno n brojeva".
U navedenom slučaju pokazaće MsgBox "Sabrano je 20 brojeva u ćeliji E3" fajla ssve.xls.
U svakom slučaju broj fajlova iz kojih se učitava broj iz ćelije E3 u ćeliju E3 fajls ssve.xls je različit, kod nekih korisnika biće 20, kod drugih 16, kod trećih 40 recimo i potrebno je pokazati iz koliko fajlova je dobije zbir ćelije E3.

Nadam se da sam uspeo da razjasnim sada.

Izvini što te možda "masiram", malo egzotike nije na odmet.
Sorry & thank You

Prijatno ti opet kišno veče, izađi u život, splav...pa pucnjava malo, pa racija..).

Hvala ti unapred


Pucaj na veliko, Mesec! Ako promašiš završićeš među zvezdama.
[ stefann127 @ 06.05.2005. 22:01 ] @
Marko,

samo jedna ispravka- dopuna.

tekst koji sam naveo u zagradama kazuje da ćelija E3 sadrži zbir prethodnih ćelija E3 ali do trenutka dok ne preuzme i sabere vrednost E3 iz tekućeg fajla:
Konkretno pre uzimanja vrednosti E3 iz fajla napr. s4.xls fajl ssve.xls sadrži zbir brojeva iz ćelija E3 do fajla s3.xls i sabrao je 3 broja, odnosno pre preuzimanja vrednosti broja iz ćelije E3 fajla s20.xls ćelija E3 fajla ssve.xls sadrži zbir E3 do fajla s19.xls.
Nakon preuzimanja broja i sabiranja E3 iz fajla s20.xls , sabrani su svi brojevi iz E3, a MsgBox javlja " Sabrano je 20 vrednosti!ENDE."

Pozdrav

Evo još jedne poručice za tebe ako ti izgledaju zanimljive.


Živi svoja uverenja i možeš promeniti SVET!
[ Marko_L @ 08.05.2005. 16:52 ] @
Aha, znači ne znaš koliko tačno ima fajlova.Vidi u tom slučaju bi fajlovi trebalo da se imenuju po nekom šablonu.Ako će biti imenovani kao s1, s2, s3...onda nemaš problema.Najbolje bi bilo da napraviš neku petlju koja će da prođe kroz fajlove i izvuče im vrednost potrebnog polja, pa tako sabrane samo upiše u poseban fajl.Nešto ovako
Code:
Dim a As Long
Dim Brojac As Long
Dim rezultat As Long
Dim NemaFajlova As Boolean
Dim xlapp As Excel.Application
Dim xlbook As Excel.Workbook
Dim xlsheet As Excel.Worksheet
Brojac = 0
rezultat = 0
Set xlapp = New Excel.Application
Do Until NemaFajlova = True
DoEvents
Brojac = Brojac + 1
Set xlbook = xlapp.Workbooks.Open("C:\s" & Brojac & ".xls")
Set xlsheet = xlbook.Worksheets(1)
a = xlsheet.Cells(3, 5)
rezultat = rezultat + a
xlbook.Close
If Dir("C:\s" & Brojac + 1 & ".xls") = "" Then NemaFajlova = True
Loop
Set xlbook = xlapp.Workbooks.Open("C:\ssve.xls")
Set xlsheet = xlbook.Worksheets(1)
xlsheet.Cells(5, 3) = rezultat
xlbook.Save
xlbook.Close
Set xlsheet = Nothing
Set xlbook = Nothing
Set xlapp = Nothing
Msgbox "Broj sabranih fajlova je " & Brojac

Pisao sam iz glave bez upotrebe VB-a, pa su moguće greške.Probaj, pa javi da li šljaka.
[ stefann127 @ 08.05.2005. 19:21 ] @
Marko,

proverio sam.
Mislim da si u delu teksta:

a = xlsheet.Cells(3, 5)
......................
xlsheet.Cells(5, 3) = rezultat

zamenio brojeve redova R3 i kolona C5 i da na oba mesta treba da stoji
a = xlsheet.Cells(5, 3) odnosno
xlsheet.Cells(5, 3).
Ali to je gut.

Brojevi fajlova su S1.xls, s2.xls ...tako da je to OK!

Međutim u fajlu ssve.xls se nakon startovanja Macros sa Code koji si napisao ne pojavljuje u Cells R5 C3 ništa
već se samo pojavi MsgBox "Broj sabranih fajlova je " i navede tačan broj.
Ono što se takođe desilo je da je prvi fajl s1.xls nakon Run zaključan tj. samo Read Only, iako su svi fajlovi zatvoreni kao i Aplikacija.

Pokušavam da ustanovim i imam još jednu konstataciju tj. mislim da svi Sheets iz fajlova moraju da se identično nazovu.
Uradio sam i Data Validation u svim .xls kao Whole Number, izmenio Dim As Long u Dim As Integer ali No Results.

Ah da, prilikom Debug Step Into u xlBook.Worksheet(1) pojavljuje se :
<Object Variable or With Block Variable not set>

Hvala ti unapred i pokušaj otkriti razlog Read Only prvog fajla.

[ stefann127 @ 14.05.2005. 19:00 ] @
Marko_L,

čoveče ima li te još.
Da li sam nešto pogrešno uradio?

Unesi svetlost u prostore katedrale.

pozdrav
[ Marko_L @ 14.05.2005. 19:45 ] @
Čekaj malo, pa ti u stvari radiš makro u VBA ? A ja ti dao kod za VB.Onda ti je još lakše.Uradi ovako
Code:
Sub mojmakro()
Dim a As Long
Dim Brojac As Long
Dim rezultat As Long
Dim NemaFajlova As Boolean
Brojac = 0
rezultat = 0
Do Until NemaFajlova = True
DoEvents
Brojac = Brojac + 1
Excel.Workbooks.Open ("C:\s" & Brojac & ".xls")
a = Excel.Workbooks(2).Worksheets(1).Cells(3, 5)
rezultat = rezultat + a
Excel.Workbooks(2).Close
If Dir("C:\s" & Brojac + 1 & ".xls") = "" Then NemaFajlova = True
Loop
Excel.Workbooks(1).Worksheets(1).Cells(3, 5) = rezultat
Excel.Workbooks(1).Save
MsgBox "Broj sabranih fajlova je " & Brojac
End Sub
[ stefann127 @ 17.05.2005. 11:15 ] @
Marko_L,

učinilo mi se jednostavnije da direktno iz Macro-a, učitam Code i saberem.

Obavio si pos'a k'a lav.

Nije sramota ne znati.

Hvala ti veliko i pozdrav.





Stvarno si delija i ne ljuti se ako navijaš za Partizan!

[ stefann127 @ 23.05.2005. 09:11 ] @
Marko_L,

pisao sam ti PP.

Molim te izvini na uznemiravanju i javi mi neku ideju.
Znači problem se proširuje na sabiranje brojeva iz istih ćelija (sada ih ima više napr sabiranje brojeva od F5:H10 iz više fajlova s1.xls. s2.xls..s20.xls) u ista polja F5:H10 jednog fajla ssve.xls.
Hvala unapred.




Dolazi vreme ovakvih!
[ stefann127 @ 25.05.2005. 09:54 ] @
Marko_L,


izvini molim te možeš li nešto pomoći do 01.Juna?
(?)
Zapao sam u oskudicu sa vremenom (:~)
?

Pomozi ili da ručno prikupljam zbir svake ćelije ponaosob.


Pozdrav






[ Marko_L @ 25.05.2005. 22:14 ] @
Evo me.Nekako mi je promakla ova tema, a PP uopšte nisam dobio.Možda si ga greškom poslao nekom drugom :)
No nebitno, nego da pređemo na stvar.Ako sam dobro razumeo šta ti treba, onda to možeš da uradiš na više načina.Možeš recimo da otvaraš workbook po workbook i sabereš prvu ćeliju iz niza, pa upišeš rezultat, pa onda opet workbook po workbook za drugu ćeliju i sve tako, što je rešenje koje nikako ne predlažem jer je dosta sporo.Sledeće rešenje je da otvoriš sve workbook-ove odjednom pa onda posabereš one ćelije koje ti trebaju.Ovo je već bolje, a i najbrže rešenje, ali pošto ne znam koliko tih fajlova imaš, možda može biti opterećujuće za memoriju, a i nisam siguran koliko workbook-ova možeš da otvoriš odjednom (niti da li uopšte postoji ograničenje).Ali, s obzirom da tačno znaš ćelije koje hoćeš da sabiraš i nema ih mnogo, rešenje koje predlažem jeste da otvaraš workbook po workbook i smeštaš vrednosti ćelija u matricu, što je verovatno nešto sporije rešenje nego ovo drugo, ali mnogo brže nego ovo prvo.Evo kako bi trebalo da izgleda kod (pažnja : pišem delimično iz glave, tako da su moguće štamparske greške):
Code:
Sub mojmakro()
Dim a(0 To 17) As Long
Dim rezultat(0 To 17) As Long
Dim BrojCelije As Integer
Dim Brojac As Long
Dim NemaFajlova As Boolean
Dim celija As Range
Dim celijasve As Range
Brojac = 0
For BrojCelije = 0 To 17
rezultat(BrojCelije) = 0
Next BrojCelije
Do Until NemaFajlova = True
DoEvents
BrojCelije = 0
Brojac = Brojac + 1
Excel.Workbooks.Open ("C:\s" & Brojac & ".xls")
For Each celija In Workbooks(2).Worksheets(1).Range("F5:H10")
a(BrojCelije) = celija.Value
rezultat(BrojCelije) = rezultat(BrojCelije) + a(BrojCelije)
BrojCelije = BrojCelije + 1
Next celija
Excel.Workbooks(2).Close
If Dir("C:\s" & Brojac + 1 & ".xls") = "" Then NemaFajlova = True
Loop
BrojCelije = 0
For Each celijasve In Workbooks(1).Worksheets(1).Range("F5:H10")
celijasve.Value = rezultat(BrojCelije)
BrojCelije = BrojCelije + 1
Next celijasve
Excel.Workbooks(1).Save
MsgBox "Broj sabranih fajlova je " & Brojac
End Sub


Eto ti rešenje, onako "na prvu loptu" koje bi trebalo da radi.E sad, ovo verovatno može i da se malo ubrza još malo, pa ti vidi da li ti i ovako završava posao ili da menjamo nešto.

Poz.
[ stefann127 @ 26.05.2005. 13:57 ] @

Marko,

isprobavam, ide nešto sporije ali ide.

Ima RAM-a, ali strpljenje me zbog mehanike redosleda ponekad izda.

Javiću ti čim "provučem" određene najpre probne vrednosti a zatim i korisničke.
Eh kada bi radio duže sa tobom, možda bih i još više naučio.

Budi i dalje to i takav, mada je za ovu zemlju to skoro useless.

Javljam se a za PP mi inije jasno kako nisi dobio.

Ako želiš pošalji mi tvoj mail na PP.


pozdrav znalcima





[ stefann127 @ 27.05.2005. 12:33 ] @
Marko,


nije da "fercera" nego just that.

zamolio bih te još nešto, čoveče, ti to radiš iz glave a ja moram proveravati red po red naredbe u Code, radi se o sledećem:
Pošto mogu očekivati probleme sa Macro-ima kod korisnika koji računaju međuzbir vrednosti, bilo bi dobro da mi Code za VB koji si dostavio u poruci broj 15 od 08.05.2005 u 16:52 dopuniš sa naredbama SetXlapp, SetxlBook, SetxlSheet..., xlBook, xlSheet..,sada za slučaj sabiranja A1:C5 (ili je isto kao u navedenoj poruci, pošto je onaj deo bio samo za jednu ćeliju F5).
U tom slučaju bih dostavio korisnicima prevedeni .exe fajl VB, pa će već ići.
Znači imao bih verziju za Macro, a posebno verziju za VB pa kako ko voli.

Nadam se da sam


Važi za tebe Y.N.W.A.- aktuelno na ostrvu.


Pozdrav


[ Marko_L @ 27.05.2005. 15:40 ] @
Ne znam zašto misliš da bi imao problema sa makroima na drugom kompu.Čak šta više, veće su šanse da bude problema sa exe fajlom pošto on zahteva da korisniku dostaviš i registruješ i vbruntime fajlove, i još neke zavisno od toga šta ubaciš u aplikaciju.Doduše sve to se da rešiti, ali ipak ti predlažem da se držiš makroa, ako je reč samo o radu u Excelu, jer čim šalješ te xls fajlove korisniku, to bi trebalo da znači da isti ima instaliran i Excel.Možda ja nisam dobro razumeo na šta misliš kad kažeš da možeš očekivati probleme.Zbog čega ?
No u svakom slučaju, kako hoćeš.Evo kako bi trebalo da izgleda kod za ovo zadnje u VB-u, recimo kada se klikne na command button
Code:
Private Sub Command1_Click()
Dim xlapp As Excel.Application
Dim a(0 To 17) As Long
Dim rezultat(0 To 17) As Long
Dim BrojCelije As Integer
Dim Brojac As Long
Dim NemaFajlova As Boolean
Dim celija As Range
Dim celijasve As Range
Brojac = 0
For BrojCelije = 0 To 17
rezultat(BrojCelije) = 0
Next BrojCelije
Set xlapp = New Excel.Application
xlapp.Workbooks.Open ("C:\ssve.xls")
Do Until NemaFajlova = True
DoEvents
BrojCelije = 0
Brojac = Brojac + 1
xlapp.Workbooks.Open ("C:\s" & Brojac & ".xls")
For Each celija In xlapp.Workbooks(2).Worksheets(1).Range("F5:H10")
a(BrojCelije) = celija.Value
rezultat(BrojCelije) = rezultat(BrojCelije) + a(BrojCelije)
BrojCelije = BrojCelije + 1
Next celija
xlapp.Workbooks(2).Close
If Dir("C:\s" & Brojac + 1 & ".xls") = "" Then NemaFajlova = True
Loop
BrojCelije = 0
For Each celijasve In xlapp.Workbooks(1).Worksheets(1).Range("F5:H10")
celijasve.Value = rezultat(BrojCelije)
BrojCelije = BrojCelije + 1
Next celijasve
xlapp.Workbooks(1).Save
MsgBox "Broj sabranih fajlova je " & Brojac
Set xlapp = Nothing
End Sub

Naravno, nemoj da zaboraviš da dodaš VB-u referencu na Microsoft Excel Object Library.
[ stefann127 @ 30.05.2005. 13:55 ] @
Marko,


većina korisnika ima problema sa Office, odmah im se prilikom podizanja neke aplikacije Disable macros, (ne samo zbog Security level) imao sam slučajeve kada nisam mogao da Enable-ujem Macro.
Nešto je prilikom instalacije OS i Office verovatno sprečavalo Macros.
Napiši mi još samo da li znaš mogućnost da zaključam Macro tj. ne dozvolim korisnicima da Edit-uju macro?
Verujem da te ne opterećujem, sigurno si se susreo sa sličnim u vezi zaštite Macros.
Na projektu na kojem radim se uhodavam, jer nije bilo predviđeno ovo što si mi ti uradio-pomogao, već sam ja na svoju ruku smišljao i kako sam nailazio na probleme, javljao sam se.
Stvarno si cool, šteta je što nismo bili u prilici da odemo malo na ovaj sajam od pre par dana.

Pozdrav




Rad,rad ...
[ Marko_L @ 30.05.2005. 16:08 ] @
Citat:
većina korisnika ima problema sa Office, odmah im se prilikom podizanja neke aplikacije Disable macros, (ne samo zbog Security level) imao sam slučajeve kada nisam mogao da Enable-ujem Macro.
Nešto je prilikom instalacije OS i Office verovatno sprečavalo Macros.

Da, to može da bude problem, mada ti tu ne možeš ništa, to je do klijenta, a ne do tebe.No dobro, kod takvih možeš da iskoristiš program napisan u VB-u.
Citat:
Napiši mi još samo da li znaš mogućnost da zaključam Macro tj. ne dozvolim korisnicima da Edit-uju macro?
Verujem da te ne opterećujem, sigurno si se susreo sa sličnim u vezi zaštite Macros.

Nema tu neke preterane mudrosti.Jednostavno stavi password na kod.To ćeš uraditi ovako, u Project browseru klikneš desnim dugmetom miša na ime projketa, pa izabereš project properties, pa onda imaš stavku Protection, ili tako nešto i tu štikliraš opciju za zaključavanje koda, tj. ne može ni da se čita, ni da se piše (ne znam tačno kako glasi opcija, ali je jedna jedina u Protection sheet-u, pa ne možeš da promašiš), i ispod imaš da staviš password.Što duži password, to je teži za razbijanje.Da li postoji neka advanced zaštita, nisam upoznat, ali meni lično najobičniji password završava posao.
Citat:
Stvarno si cool, šteta je što nismo bili u prilici da odemo malo na ovaj sajam od pre par dana.

Hvala, a za sajam, pa biće ih još valjda :)

Poz.
[ stefann127 @ 31.05.2005. 12:55 ] @
Marko,


biće sajma nego šta.

Pošalji mi na PP tvoj mail pa čekamo, mađarice, francuskinje ili neke druge ...šta...

Zamolio bih te da ti ili tvoje kolege zaključite ovu temu, mada je moguće da će se neko zainteresovan javljati sa narednim "egzotikama".
Stvarno si "boli glava-pade kokos".

Divno je saznanje da postoje takvi kao ti i da ih je dovoljno pa i sve više.

Pozdrav i tu sam opet





[ stefann127 @ 06.06.2005. 22:30 ] @
Marko,

izvini opet ja.
Code koji si mi poslao radi, nema nego, ali opet se pojavio specifičan problem.
Pokušaću na primeru da ti objasnim:

Code:
   
...
For Each celijasve In Workbooks(1).Worksheets(1).Range("F5:H10")
...


Sabiraju se sve ćelije, milina živa.
Ali pojavilo mi se nešto što nisam očekivao.Uzimam isti primer.
Određeni redovi su protected i ne sme se vršiti sabiranje u njima.
Želim napr. sabrati ćelije u redu F5:F8, u iste u fajlu ssve.xls.
Preskačem red red 6 tj. F6:H6 ne mogu sabrati, jer je Protected rows.
Zatim ponovo želim sabrati ćelije F7:H8, znači redovi 7 i 8 se sabiraju.
Ponovo se preskače red 9 tj. F9:H9 jer su protected i na kraju recimo
želim zbir F10:H10.
Ti protected rows su poznati.(ili bih mogao dati neki upit za njih odn. one redove koje ne mogu sabrati)
Da li bih mogao tada koristiti Hidden Rows naredbu kojom se Vrednosti u protected rows ne bi sabirale?

Code:
   
...
     Rows ("6:6").EntireRow.Hidden = True
...


tj. tada ih Macros ne bi sabirao ili predlažeš da se napravi Upit za protected Rows
....
If Cells (6, 6).Value = Protected Then
Rows("6:6").EntireRow.Hidden = True

Nadam se da uskoro zatvaramo ovu temu.

Pozdrav
[ Marko_L @ 07.06.2005. 00:45 ] @
Mislim da je najbolje i najjednostavnije da u samoj petlji koja izvodi račun staviš da protected celije ne sabira.Nešto tipa
Code:
If Not celija.Value = Protected Then
'procedura za racunanje
End If
[ stefann127 @ 07.06.2005. 14:04 ] @
Marko,


nadam se da sam dobro razumeo i šaljem ti samo deo koda koji sabira Value iz ćelija, izuzev Pretected.

Code:

...
For Each celija In Workbooks(2).Worksheets(1).Range("F5:H10")
a(BrojCelije) = celija.Value
If Not celija.Value = Protected Then
rezultat(BrojCelije) = rezultat(BrojCelije) + a(BrojCelije)
BrojCelije = BrojCelije + 1
End If
Next celija
...



Ali opet ja tu nešto kao ...
Ako u ćeliji nije unešen broj, niti ikakav podatak da li da se podrazumeva da je unešena 0 tj.

If a(BrojCelije) = Nothing Then
a(BrojCelije) = 0
End If
ili da ništa ne menjam, neunešena value neće biti sabrana?
U žurbi sam nekoj i nadam se da ću sutra probati "funktionieren, ja ja".

Pozdrav
[ stefann127 @ 08.06.2005. 11:58 ] @
Marko,

bilo je malo gimnastike ali

Code:

...
For Each celija In Workbooks(2).Worksheets(1).Range("C9:L22")
a(BrojCelije) = celija.Value
rezultat(BrojCelije) = rezultat(BrojCelije) + a(BrojCelije)
BrojCelije = BrojCelije + 1
If Not celija.Value = Protected Then
    ' sabiranje
End If
Next celija
Excel.Workbooks(2).Close
..



funkcioniše.
Međutim u Pretected ćelijama ili u ćelijama gde je Calculated ćelija (sadrži neku funkciju SUM(C14:C22)), izračuna se ta suma, ali u statusnoj liniji excel gde je bila SUM izbriše funkciju.
To mi nešto remeti-smeta, poželjno je da ostane funkcija na statusnoj liniji.
Da li bi mi rešila ovaj problem funkcija koja ne menja sadržaj polja i kako to da izvedem.

Što se tiče onih 0(nula) u redu je ne moram unositi vrednost 0 u ćeliju.

Pozdrav


[ Marko_L @ 08.06.2005. 15:00 ] @
Polja koja sadrže bilo kakvu formulu ne bi trebalo da menjaš iz koda, jer ona se automatski popunjava kada se piše po poljima koja su obuhvaćena tom formulom.
[ stefann127 @ 09.06.2005. 10:24 ] @
Marko,

nisam ni nameravao da Code-om menjam ćelije sa formulom, ali sam te upitao za razlog zašto se nakon Run--Macro izbriše formula SUM(...) iz ćelije u kojoj je bila pre izvršavanja Macroa.?
Dakle nadam se da se razumemo, Protected ćelije i ćelije sa formulama ja NE ŽELIM MENJATI sa Code.
Zato te sada i pitam da li bi trebalo i ćelije sa formulama da budu Protected?

Hvala ti unapred, bliži se vreme da se tema zaključi, ali sačekaj još malo


Pozdrav


[ Marko_L @ 09.06.2005. 19:03 ] @
Izvini, malo sam više u poslu zadnjih 2-3 dana, pa nisam pažljivo čitao postove.Samo sam ovlaš pokušao da ti pomognem.Elem, što se tiče tog problema, nije mi baš najjasnije šta se tačno dešava.Ukoliko makro menja vrednost te ćelije sa formulom, onda je sigurno negde "zakačiš" iz koda.Jesi li probao da ih staviš da i one budu Protected pa da vidiš šta se dešava.A možda bi mogao, ako tačno znaš koja ćelija sadrži formulu da je jednostavno preskočiš sa nečim tipa (ovo je pseudo) kod If celija.Row = x And celija.Col = y Then pređi na sledeću ćeliju.Ajde ako ne rešiš problem, postuj deo koda koji pravi problem, pa ći pogledati (sutra ću imati malo više vremena).
[ stefann127 @ 14.06.2005. 09:02 ] @
Marko,


ajde još malo samo.

Pojavio mi se i slučaj kada se izračunava zbir ćelija u jednom redu, a zatim u redu ispod njega formula koja ponavlja vrednosti iz prethodnog reda:
napr.
Red 3
A3=100, B3=200 C3=500
Ove vrednosti su rezultat zbira A3:C3 iz prethodnih fajlova
Red 4
A4=A3, B4=B3 C4=C3

Međutim deo Code
If InStr(1, celija.Formula, "SUM") = 0 And Not celija.Value = "Protected" Then


Code:

...
If InStr(1, celija.Formula, "SUM") = 0 And Not celija.Value = "Protected" 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:\ibk\os\ss\osss" & Brojac + 1 & ".xls") = "" Then NemaFajlova = True
Loop
BrojCelije = 0
For Each celijasve In Workbooks(1).Worksheets(1).Range("A1:C10")
If InStr(1, celijasve.Formula, "SUM") = 0 And Not celijasve.Value = "Protected" Then
....


mi izbriše formule
A4=A3, B4=B3 C4=C3 i unesu se vrednosti u polja A4:C4.

Da li može umesto "SUM" da stoji "" čime bi bio obuhvaćen bilo šta unešeno u formulu pa i znak = tj. statusnoj liniji ćelije?
Ma nije da napredujemo nego nam ni Red Army ne može ništa.

Hvala unapred i pozdrav

E da , nemoj da te zbunjuje Path C:\ibk\os\ss i File Name osss

* Opet da dodam
* Malo gimnastike, stavio sam u polja koja se formulom poistovećuju odn. red 4
* A4=SUM(A3+0)


[ stefann127 @ 14.06.2005. 12:46 ] @
Molba za pomoć!
H I T N O !

Marko i ostali experti,


pokušajte mi objasniti izvor greške
U code
Code:


Sub makroibk()
Dim a(0 To 29) As Long
Dim rezultat(0 To 29) As Long
Dim BrojCelije As Integer
Dim Brojac As Long
Dim NemaFajlova As Boolean
Dim celija As Range
Dim celijasve As Range
Brojac = 0
For BrojCelije = 0 To 29
rezultat(BrojCelije) = 0
Next BrojCelije
Do Until NemaFajlova = True
DoEvents
BrojCelije = 0
Brojac = Brojac + 1
Excel.Workbooks.Open ("D:\ess" & Brojac & ".xls")
For Each celija In Workbooks(2).Worksheets(1).Range("A1:C10")
If InStr(1, celija.Formula, "SUM") = 0 And Not celija.Value = "Protected" Then
a(BrojCelije) = celija.Value
rezultat(BrojCelije) = rezultat(BrojCelije) + a(BrojCelije)
BrojCelije = BrojCelije + 1
End If
Next celija
Excel.Workbooks(2).Close
If Dir("D:\ess" & Brojac + 1 & ".xls") = "" Then NemaFajlova = True
Loop
BrojCelije = 0
For Each celijasve In Workbooks(1).Worksheets(1).Range("A1:C10")
If InStr(1, celijasve.Formula, "SUM") = 0 And Not celijasve.Value = "Protected" Then
celijasve.Value = rezultat(BrojCelije)
BrojCelije = BrojCelije + 1
End If
Next celijasve
Excel.Workbooks(1).Save
MsgBox "Broj sabranih fajlova je " & Brojac
End Sub




"Run Time Error "6"

Overflow

Na stranama objasnjenja Moderatora mladenovicz pod
Overflow

dobijem komentar

TopicID nije naveden/nađen. Koristite Pretragu iz gornjeg menija da biste pronašli temu koja vas zanima.

Marko koristio sam Code koji si mi .zip poslao
Nastavlja se

Hvala unapred


Pozdrav




[ stefann127 @ 14.06.2005. 20:42 ] @
Marko,

Pokušavao sam da učitam preko 30 fajlova, bilo je i protektovanih i ćelija sa formulama i možda je to razlog Run Time Error ‘6’ Overflow .
Da te ne bih opterećivao sa svojim eksperimentisanjem, hajde još samo razmisli i ako želiš pomozi u istom cilju, da ne bih istraživao granice i pravio akrobacije, mogu naići na ograničenja kod korisnika koji sačinjavaju međuzbir.
Dakle ovako ti predlažem:
Svaki fajl je imenovan ess1.xls, ess2.xls i tako desetine puta, sa određenim brojem protektovanih i određenim brojem ćelija sa formulama.
Možeš li prepraviti i dopuniti Code koji si mi poslao Upload (koji je volšebno nestao sa ovog foruma), tako da fajl essve.xls parcijalno računa zbir, tj. beleži zbir (po mogućnosti pokaže dotadašnji broj učitanih fajlova - znači nije neophodno), zadržava tu vrednost zbira do recimo ess20.xls, pa se nakon 1 dana želi učitati naredni fajl čije se vrednosti žele sabrati sa dotadašnjim zbirom odn. “Učitaj naredni fajl ess21.xls”, (ne mora broj dotada učitanih “21” ako je veliki problem), Run macroibk koji računa novi zbir i zapamti vrednost, pa zatim nakon 3 dana kada se želi učitati ess22.xls, ponovo “Učitaj naredni fajl ess22.xls “(ne mora broj dotada učitanih “22” ako je veliki problem), Run macroibk i ponovo se snimi to trenutno stanje zbira (po mogućnosti sa MsgBox da je “Učitano je _ _ fajlova” iz Counter-a – znači nije neophodno).
Pravilo o imenovanju fajlova se poštuje.

Stvarno dosađujem, ali ograničenja su brojna, (MSOffice-Macro i Verzija, Memory, tako da bi me privremeno spaslo učitavanje JEDNOG PO JEDNOG FAJLA , Macro-om.
I tada privremeno prestajem da ti dosađujem, ali već imam novih tema- dilema- problema-..
Hvala unapred i podsetiću te na događaje 2006 godine.
[ Marko_L @ 15.06.2005. 17:42 ] @
Što se tiče onog InStr i SUM, možeš da ubaciš bilo šta što je karakteristično za formulu, a nema ga u drugim ćelijama.E sad, verovatno postoji i bolji način da se odredi da li ćelija sadrži formulu ili ne, ali ne mogu da se setim sad.
A što se tiče overflow-a, nije sigurno do broja fajlova koji se otvaraju, jer u kodu koji sam ti dao se ne otvaraju svi odjednom, već jedan po jedan.Znači fajl se otvore, pokupe se potrebni podaci, smeštaju u matricu, a zatim se fajl zatvara, i otvara sledeći i sve tako.Pre će biti da se overflow javlja zbog neke promenljive koja ne može da prihvati određenu vrednost.Bilo bi dobro da vidiš tačno na kojoj liniji se javlja overflow, pa ćemo tako lakše naći problem.A pre toga možeš da probaš sledeće
Zameni
Code:
Dim a(0 To 29) As Long
Dim rezultat(0 To 29) As Long

sa
Code:
Dim a(0 To 29) As Double
Dim rezultat(0 To 29) As Double


P.S. - Što se tiče nestalih fajlova, odnosno poruka, do toga je došlo zbog problema sa ES bazom, tako da su iste otišle u nepovrat.Ukoliko ti trebaju ti fajlovi, nije problem, imam ih sačuvane, pa ti mogu okačiti ponovo.
[ stefann127 @ 15.06.2005. 21:08 ] @
Marko,

našao sam u MSDN da je overflow Error 6 posledica toga što postoji ograničenje u broju redova od 2519 koje se nalaze u TBLInterseHistory table odn. navodim ti text iz MSDN:

SYMPTOMS
When you use the Import History Manager in Usage Import and there are more than 2,519 rows in the TBLInterseHistory table, the following error message occurs:

Run-Time error '6': Overflow
After you click OK, Usage Import shuts down.

CAUSE
During this process, there is a signed integer variable used for indexing. When the number of rows in the TBLInterseHistory table exceeds 2,519, the index exceeds the maximum allowable value for a signed integer (32767 or 7FFF Hex).
To resolve this problem immediately, contact Microsoft Product Support Services to obtain the fix. For a complete list of Microsoft Product Support Services phone numbers and information on support costs, please go to the following address on the World Wide Web:

http://support.microsoft.com/directory/overview.asp

The English version of this fix should have the following file attributes or later:


Date Time Size File name Platform
------------------------------------------------------------------
08/24/1999 8:17PM 2,259,968 UImport.exe (Access) x86
08/24/1999 8:17PM 2,442,240 UImport.exe (SQL Server)

08/24/1999 8:17PM 2,822,656 UImport.exe (Access) Alpha
08/24/1999 8:17PM 3,019,264 UImport.exe (SQL Server)



te se nudi download fajlova.
Ali na to ne mogu računati kod korisnika čiju konfiguraciju ne poznajem, tako da mi je nesigurno.
Što se tiče mesta zastoja i pojave Error, ono se menja zavisno od toga da li su u nekim ćelijama bile unešene vrednosti ili su bile prazne.
Isprobao sam i tražio uzrok promene mesta Nastanka greške i jedino to pronašao.

Dakle misliš da je dovoljno da promenim Dimension promenljive a i rezultat
Probaću deklarisanjem As Double ali sam u obavezi da do 20 juna pošaljem korisnicima Macro (normalno Password -ovan), pa se bojim da li ću stići ili da parcijalno uradim dva ili tri makroa, jednim da se sabira recimo A13,sledećim makroom F1:F3 i td.
Tako sam probao i ide, u Validation svih ćelija su uneli Number, Greather then 0, drugih ograničenja nema.


Što se tiče fajlova snimio sam ih i imam ih ali me je malo iznenadilo kako su nestali.
OK!

Hvala ti na razumevanju samo mi napiši da li učitavanje jednog po jednog fajla
parcijalno može promeniti stanje resources.

Ma biće sveta, dok je takvih.
Evo nešto za tebe!

Koristi one talente koje imaš.
Šume bi bile veoma tihe ako bi pevale samo one ptice koje najbolje pevaju!




[ stefann127 @ 16.06.2005. 19:03 ] @
Marko lave,


promenio sam

Code:

...
Dim a(0 To 29) As Double
Dim rezultat(0 To 29) As Double
Dim BrojCelije As Long
..


i melje se, milina gledati.
Promenio sam BrojCelije u Long , preventiva.
Ostavi mi poruku o mail adresi da ti ne pišem zašto sada.

Ako imaš strpljenja kao i tvoje kolege moderatori nastavio bih sa još nekim za mene unteresantnim problemima i temama, ali o tom ...




Dokle god si živ učiš kako se živi.

Drago mi je da postojiš ti i tebi slični i nastavite tako.
Zahvalnost i Shadowed

Pozdrav
[ stefann127 @ 16.07.2005. 22:07 ] @
Marko,
Lavovi sa es,

Prilikom određivanja sume tvojom i pomoći drugih nastaju "određene situacije"
Obzirom da postoje slučajevi kada se u jednoj ćeliji bilo kog fajla iz nekog razloga promeni neka vrednost, tada je potrebno računati sumu ponovo.
U takvim situacijama (fajl sa izmenjenim vrednostima je uredno snimljen) međutim Macro izračuna sumu koja nije rezultatski ispravna tako što pomeri rezultate za red naviše a nekad čak i pokazuje identične rezultate kao i da nisu izmenjene vrednosti u nekim ćelijama.
Molim te reci ako znaš da li je moguće da ranije verzije Office ili na drugim PC mogu napraviti problem da kada se promeni jedan sabirak nastane u sumi takav poremećaj da ponovnim startom Macroa ili zapamti stari zbir ili ispomera vrednosti u redovima.

Ludilo.

Ima li ovde pomoći?

Ako nisi otputovao ....

Pozdrav
[ Marko_L @ 16.07.2005. 23:03 ] @
Kako menjaš podatke u ćelijama.Ručno promeniš i snimiš, ili preko nekog makroa ? Mislim, da to ne bi trebalo da se dešava ako je fajl uredno promenjen i snimljen, jer makro koji smo napravili radi svaki put "od nule", znači podatke koje uzima iz fajlova su oni koji sigurno stoje u fajlu.E sad, jedino pitanje je šta se dešava sa fajlom pre nego što se pokrene makro ?
[ stefann127 @ 18.07.2005. 13:34 ] @
Marko,

Hvala ti na javljanju, pisao sam ti na PP ali opet nisi dobio.

promeni se podatak u nekoj ćeliji manuelno, snimi fajl i zatvori se fajl normalno.
Pomenuo sam da su Sheets Protect i Workbook Protect.
Ali dešava se da je neki fajl korisnik Unprotect namerno i moguće je da tu leži razlog "ludovanja"
Da li je moguć razlog u ovim Protect Workbook i Sheet?

Napominjem da kod mene na PC radi sve OK,ali na drugim PC i sa donešenim podacima od korisnika pojavljuje se kod određenih fajlova informacija da su rađeni u ranijim verzijama Office prilikom Macro -- Run i otvaranja fajla Warning Msg.
MS Excell .. has been change value during Recalculate formula ...nisam baš zapamtio sve...i
Do You want to save changes to file ....koji je trenutno otvoren zbog sabiranja.
Nudi se Yes/No/Cancel.

Citat:
E sad, jedino pitanje je šta se dešava sa fajlom pre nego što se pokrene makro ?


Pre pokretanja Macro, svi fajlovi su "zbrinuti", zatvoreni i nije aktivan nijedan program koji manipuliše fajlovima.

Treba mi jedan od tvojih mail-ova na koji bih ti poslao poručicu ili mi pošalji PP.

Ako možeš pomozi mi za ono "lepljenje" .xls iz više fajlova u jedan i to jedan ispod drugog.

Pozdrav
[ Buck @ 20.03.2008. 11:38 ] @
Moj problem je sledeci:
Iz svoje aplikacije u VB-u pozovem Excel i otvorim neki Workbook radi pregleda neke tabele.
Nakon toga izadjem iz Excela na 'redovan' nacin snimajuci eventualne promene u tabeli i vratim se na svoju VB aplikaciju medjutim, Excel i dalje ostaje u memoriji!!!???
Ovo dalje produkuje problem da ne mogu da ponovno pozovem Excel za pregled neke druge tabele.
Citajuci postove na ovom sajtu, kao i citajuci MSDN, skontao sam da ce se Excel unloudovati iz memorije tek onda kada se sa njega skine i poslednja referenca.
E tu mi dalje nije jasno zasto posle sledecih komandi:

Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing

Excel i dalje ostaje u memoriji!?

Mozda problem predstavlja sam metod referenciranja koji sam primenio!?
Naime, ja sam za svoju aplikaciju izvrsio referenciranje Excela preko menija u samom projektu: Project>References, pa mi je mozda ta referenca 'stalnog karaktera' tj., dok se ne izadje iz aplikacije koju sam napravio - ne znam.
U svakom slucaju je glupo da moram da stavljam upozorenje za korisnike da ukoliko zele da ponovno izvrse pregled neke tabele da treba da restartuju moju aplikaciju.