< návrat zpět

MS Excel


Téma: velikost adresáře rss

Zaslal/a 6.5.2018 20:33

Ahoj, mám formulář, který mi nabídne seznam podadresářů na určité cestě. Lze ve VBA zjisti velikost těchto podaresářů? Děkuji

Zaslat odpověď >

Strana:  1 2   další »
#040301
elninoslov
Hneď prvý odkaz na Google:
Sub FolderSize()
Dim fso As Object, fsoFolder As Object
Const strFolderName As String = "d:\adresár\"

Set fso = CreateObject("Scripting.FileSystemObject")
Set fsoFolder = fso.GetFolder(strFolderName)

MsgBox fsoFolder.Size & " bytes"

Set fsoFolder = Nothing
Set fso = Nothing

End Sub


EDIT:
Tu som Vám spravil príklad načítania veľkosti všetkých podadresárov.
Příloha: zip40301_velkost-podadresarov.zip (16kB, staženo 38x)
citovat
#040503
avatar
To je nějaké zoufalství. Proč tolik proměnných a tolik řádků, když všechno potřebuješ jen jednou? A proč závěrečná
Set ... = Nothing
když přece lokální proměnné zhubí procedura sama?

Bohatě stačí

Sub FolderSize()
MsgBox CreateObject("Scripting.FileSystemObject").GetFolder("d:\adresár\").Size & " bytů"
End Sub

nebo

Function FolderSize&(strFolderName$)
FolderSize = CreateObject("Scripting.FileSystemObject").GetFolder(strFolderName).Size
End Functioncitovat
#040504
avatar

Honza53 napsal/a:

To je nějaké zoufalství.


A kde berete vy tu drzost, že to vaše jednořádkové cool řešení je to nejlepší? :-)citovat
#040505
elninoslov
Honza53 : Na začiatku môjho postu píšem "Hneď prvý odkaz na Google:" - tým dávam iba najavo, aké triviálne jednoduché je do 5 sekúnd po dopísaní vyhľadávacieho dotazu (skôr ako napísanie príspevku na fórum) nájsť kostru riešenia zistenia veľkosti adresára. Z nájdenej kostry si má človek zobrať iba čo potrebuje.

Pod touto kostrou som pridal kompletné riešenie celého "problému" s načítaním názvov a veľkostí všetkých podadresárov vo zvolenom adresári do Listboxu vo Forme. Object som vytvoril raz. Pole názvov a veľkosti sa načíta do Listboxu naraz. Nejaké kontroly a hlášky. Iste, dali by sa vypustiť glob. premenné, a procedúru urobiť v Initialize. Všetko má svoje "ale", potom treba myslieť že Initialize nejde exnúť pri nevybraní adresára (možno následne v OnActivate, prípadne v loadnutom Forme cez Button). Pozeral ste tú prílohu?citovat
#040554
avatar
To, co jsem napsal, je NORMÁLNÍ způsob programování. Opsat odněkud cosi, co hned při prvním čtení obsahuje spoustu zbytečností, to je čirým zoufalstvím, ať se to komu líbí či nelíbí. Jiná věc ovšem je, KDY je toto zoufalství omluvitelné a kdy není.

Úplní začátečníci:

1. Používají proměnné pro věci, které potřebují jen jednou, viz mnou kritizovanou proceduru.

2. Nepoužívají proměnné tam, kde jsou zapotřebí, a nechají Basic opakovaně kalkulovat tatáž monstra, např.
ActiveWorkbook.Sheets("Jméno dlouhé jako Lovosice").Range("A1") = 7
ActiveWorkbook.Sheets("Jméno dlouhé jako Lovosice").Range("A2") = 5
Nenapíší ani
With ActiveWorkbook.Sheets("Jméno dlouhé jako Lovosice")
.Range("A1") = 7
.Range("A2") = 5
End With
ani
Dim s As Sheet
Set s = ActiveWorkbook.Sheets("Jméno dlouhé jako Lovosice")
s.Range("A1") = 7
s.Range("A2") = 5
ani je nenapadne využít kódové jméno listu, změnit je na cosi mnemotechnického, třeba Lovosice, a napsat
Lovosice.Range("A1") = 7
Lovosice.Range("A2") = 5
Samozřejmě normální způsob programování je ony buňky pojmenovat, třeba Franta a Jarda a napsat
Range("Franta") = 7
Range("Jarda") = 5
nebo
[Franta] = 7
[Jarda] = 5
kdy navíc při případné změně v listu (vsunutí sloupce či řádku před první sloupec či řádek) není nutné program měnit a přepisovat ona "A1", "A2".

3. Používají proměnné typu Variant i tam, kde stačí typ Text, například
Dim s$
s = Range(...).Value
místo správného
Dim s$
s = Range(...).Text
S proměnnými typu Text pracují zase tam, kde stačí pracovat s indexy nebo s objekty, tj. použijí
ActiveWorkbook.Sheets("Jméno dlouhé jako Lovosice")
kdy chudák Basic musí procházet kolekci Sheets a porovnáváním dlouhých textů hledat ten správný, místo
ActiveWorkbook.Sheets(5)
kdy Basic musí z kolekce Sheets "jen" vybrat ten pátý. Přitom nejjednodušší a nejrychlejší (a proto normální) je přímý (!) přístup přes název objektu:
Lovosice

Úplný začátečník má na uvedené neumělosti a zbytečnosti právo. Když někdo jeho kód zjednoduší do normálního způsobu programování, je rád, že se může něco přiučit a postupně přestat být pouhým začátečníkem.
Jen ti, co se zpupně odmítají něco naučit, zůstávají doživotními nejzačátečnějšími začátečníky, i když se třeba svým pseudoprogramováním živí nebo ho nekriticky cpou na web (což je psychiatricky zajímavé), takže je tam vygůglíte. Ti se smrtelně urazí, když jim někdo předvede významné zjednodušení, a onu zjednodušující radu prohlásí třeba za "drzost"; i to je psychiatricky zajímavé, zvlášť když někteří ani neumějí česky a przní češtinu anglickými termíny, jako třeba "cool".

Howgh.citovat
#040555
avatar

Honza53 napsal/a:

To, co jsem napsal, je NORMÁLNÍ způsob programování. Opsat odněkud cosi, co hned při prvním čtení obsahuje spoustu zbytečností, to je čirým zoufalstvím, ať se to komu líbí či nelíbí. Jiná věc ovšem je, KDY je toto zoufalství omluvitelné a kdy není.

Úplní začátečníci:

1. Používají proměnné pro věci, které potřebují jen jednou, viz mnou kritizovanou proceduru.

2. Nepoužívají proměnné tam, kde jsou zapotřebí, a nechají Basic opakovaně kalkulovat tatáž monstra, např.
ActiveWorkbook.Sheets("Jméno dlouhé jako Lovosice").Range("A1") = 7
ActiveWorkbook.Sheets("Jméno dlouhé jako Lovosice").Range("A2") = 5
Nenapíší ani
With ActiveWorkbook.Sheets("Jméno dlouhé jako Lovosice")
.Range("A1") = 7
.Range("A2") = 5
End With
ani
Dim s As Sheet
Set s = ActiveWorkbook.Sheets("Jméno dlouhé jako Lovosice")
s.Range("A1") = 7
s.Range("A2") = 5
ani je nenapadne využít kódové jméno listu, změnit je na cosi mnemotechnického, třeba Lovosice, a napsat
Lovosice.Range("A1") = 7
Lovosice.Range("A2") = 5
Samozřejmě normální způsob programování je ony buňky pojmenovat, třeba Franta a Jarda a napsat
Range("Franta") = 7
Range("Jarda") = 5
nebo
[Franta] = 7
[Jarda] = 5
kdy navíc při případné změně v listu (vsunutí sloupce či řádku před první sloupec či řádek) není nutné program měnit a přepisovat ona "A1", "A2".

3. Používají proměnné typu Variant i tam, kde stačí typ Text, například
Dim s$
s = Range(...).Value
místo správného
Dim s$
s = Range(...).Text
S proměnnými typu Text pracují zase tam, kde stačí pracovat s indexy nebo s objekty, tj. použijí
ActiveWorkbook.Sheets("Jméno dlouhé jako Lovosice")
kdy chudák Basic musí procházet kolekci Sheets a porovnáváním dlouhých textů hledat ten správný, místo
ActiveWorkbook.Sheets(5)
kdy Basic musí z kolekce Sheets "jen" vybrat ten pátý. Přitom nejjednodušší a nejrychlejší (a proto normální) je přímý (!) přístup přes název objektu:
Lovosice

Úplný začátečník má na uvedené neumělosti a zbytečnosti právo. Když někdo jeho kód zjednoduší do normálního způsobu programování, je rád, že se může něco přiučit a postupně přestat být pouhým začátečníkem.
Jen ti, co se zpupně odmítají něco naučit, zůstávají doživotními nejzačátečnějšími začátečníky, i když se třeba svým pseudoprogramováním živí nebo ho nekriticky cpou na web (což je psychiatricky zajímavé), takže je tam vygůglíte. Ti se smrtelně urazí, když jim někdo předvede významné zjednodušení, a onu zjednodušující radu prohlásí třeba za "drzost"; i to je psychiatricky zajímavé, zvlášť když někteří ani neumějí česky a przní češtinu anglickými termíny, jako třeba "cool".

Howgh.


Mě filozofické kecy nezajímají. Budiž, zařadím si vás do škatulky "nejkratší kód je nejlepší". Akorát že občas budete za vola (ale to já jsem pro jiné taky, takže v klidu :-D)citovat
#040556
avatar
Uz drive jsem si vsimnul, ze pan Honza53 si plete zdejsi forum za nejaky jo vedecky seminar o programovani v Basicu.
Pane, to takhle reagujete i na dalsich webech a forech o Excel a VBA a vyucujete tam vasemu normalnimu zpusobu programovani?? Jestli tak komentujete kazdy trivialni kus kodu, pane to klobouk dolu, to se musite upsat.
Ale zrejme mate za sebou mnoho napravenych a vyskolenych programatoru, kteri diky vam vedi, jak spravne a co nejkratseji to v Basicu udelat, kdyz mate takove superego a tlacite sem sva moudra.

Pane, pokud nevite k cemu forum slouzi, tak radsi nekomentujte. Na internetu mate prostoru dost, zalozte si web a online vyuku, a jestli uz takovy mate, hodte sem link.. (cekam, ze ho mate, kdyz jste tak prevzdelany)
Za me je hned prvni odpoved spravna, jasna, srozumitelna a musi tazateli vyhovovat.
Kazdy ma svuj zpusob psani kodu. Vy mate svuj, nikdo vam ho nebere, ale netlacteho ho prece ostatnim lidem... Pokud je tazatel zacetecnik, a sem, do fora chodi predevsim zacatecnici, tak potrebuje prave ten typ kodu, ktery v druhem prispevku dostal. Az potom, co pochopi kod, a bude mit vic zkusenosti, muze svuj kod prizpusobovat atd. Vase hrozna jednoradkova slitina ho spise zmate a uskodi.

Vazne pochybuji o vasem lektorskem programatorskem umeni...
Vasi proceduru ani funkci, postradajici error handler, bych urcite nepouzil.

sydcitovat
icon #040557
avatar
No, ja by som sa Honzu zastal. Mam za to, ze pokial sa chce niekto dostat na vyssiu uroven, tak Honzove postrehy nie su od veci. On napr. elninoslov tiez dost casto reaguje az po tom, co niekto uz problem vyriesil a casto dava dalsie a dalsie "vylepsenia", tak pokial si niekto iny dovoli vylepsit jeho riesenie, tak to nie je dovod k staznostiam. Chapem, ze Honzov mentorsky styl sa niekomu pacit nemusi, osobne ale jeho postrehy nepokladam za spatne.citovat
#040558
avatar
Ja silne nesouhlasim prave tim zpusobem, kterym to pan Honza53 prezentuje... jako ja jsem mistr a vim to nejlip, podivejte se na me, jak to umim...
Jako definovani promenne dim s$ a Function FolderSize&(strFolderName$), proboha, na co si to hrajete...
A dim s as Sheet ... to snad ani neexistuje.

Ja si bohuzel myslim, ze to bude nejaky neuznaly expert, rozhodne ne mentor a clovek schopny nekoho naucit. Timto stylem ne.

diky
sydcitovat
icon #040559
avatar
Ale no iste, na sposobe komunikacie by sa zapracovat dalo. Pokial si mam ale vybrat, tak tolerujem istu neurvalost, ak mi odmenou za to je, ze sa dozviem nieco zaujimave. Sam sa tiez nevyjadrujem vzdy najslusnejsie a mam pochopenie k menej slusnemu sposobu komunikacie, pokial ista hrubost nie je samoucelna. Su i horsie vlastnosti, napr. lenivost, neochota premyslat, vypocitavost atd. Konieckoncov, i skutocne slusni jedinci, napr. eLCHa, poslu obcas niekoho do haja, ked pohar trpezlivosti pretecie :)citovat

Strana:  1 2   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje