Az „Excel” fórum célja, hogy keretet adjon az Excel felhasználók széles táborának tapasztalataik megosztására, és lehetőséget a segítséget kérőknek. Az alábbi összefoglaló azért készült, hogy segítse a helyes kérdésfeltevést.
– Írd le szabatosan a problémát. Úgy fogalmazz, hogy ne csak te magad, de a szakértő is megértse, mire szeretnél választ kapni.
– Írd le, hogy milyen verziójú Excellel dolgozol. (Vagy ha nem – ill. nem csak – Excel, akkor micsoda?)
– Írd le, hogy milyen úton indultál el, és hol akadtál el rajta.
– A kérdés megértése szempontjából sokat segíthet, ha feltölteszt egy képet, amin látszik, hogy mit szeretnél, vagy illusztrálja azt.
– Még jobb, ha feltöltesz egy minta munkafüzetet valahová (pl. data.hu). Feltöltés előtt távolítsd el belőle a nem publikus adatokat.
– Ha a feladat jellege olyan, célszerű az "előtte" és "utána" állapotokat bemutatni. (Miből kellene csinálni mit?)
– Ha VBA kódon kell javítani, másold be a releváns kódrészt. Rövid kód mehet hozzászólásba, hosszú kód inkább ide: http://pastebin.com/
– Ha valami nem úgy működik, ahogy kellene, add meg a rendellenes viselkedés jellemzőit, a hibaüzenetet, és a hibát okozó programsort.
Köszönöm szépen a kimerítő leírást, le is mentettem favoritok közé. A leírtak alapján valóban hasonlít az sql-ben használható view-k gyakorlati hasznára, így értem. Egy következő munkámhoz megpróbálom használni majd, igazából akkor fogom műszakilag is megérteni.
Más, és kicsit off:
Tudsz arról valamit, hogy az office valamely programja képes lehet (acces, excel, visio) fastruktúrát kezelni/használni. A cél, hogy fastruktúrát képes legyek használni excelben vagy accesben. A cél, hogy főkönyviszámok ft értékeit egy fastruktúra szerint tudjak részösszegezni.
"A "Class Module" funkció szerint olyasmi lehet, mint mssql-ben a tárolt eljárások (stored procedure), vagy a view-k"
Ezt nem tudom.
Viszont RHCPgergo jól mondta, saját objektumokat lehet létrehozni velük. Pontosabban objektum osztályokat, vagy nevezhetjük őket típusoknak, ez nyelvfüggő. Azért lehet kicsit nehéz megérteni, mert általában ezeknek az objektumoknak nincs vizuális megjelenésük. De az excel vizuálisan megjelenő objektumain jól le lehet vezetni az analógiát.
Pl. a Range az egy típus, konkrétan a Range("A1") pedig egy Range típusú objektum.
A Range típusnak vannak tulajdonságai (Property), vannak hozzá kapcsolódó eljárások (Method). Eseményei (Event) ugyan nincsenek, de éppenséggel lehetnének. A típus definíciója tartalmazza mindazt, ami a típusból generált egyéni objektumra jellemző.
Amikor azt mondod, hogy Range('A1").Value, akkor a .Value property használatát a Range típus definíciójából vesz elő a rendszer, és vonatkoztatja azt konkrétan az A1 cellára. Az A2 cella esetében ugynez: a .Value property használatát a Range típus definíciójából vesz elő a rendszer, és vonatkoztatja azt konkrétan az A2 cellára.
Így tehát a Range típus .Value tulajdonságának leprogramozását egyszer kell megcsinálni, és az utána minden Range típusú objektumra érvényes lesz.
Ennek analógiájára kell elképzelni a Class Module-okat. A Class Module arra való, hogy azon 1 azaz egy darab objektumtípust definiálj. Meg kell adni a típus nevét, ez a fenti példában "Range", én mondjuk elnevezem az objektumtípusomat "Hűtőszekrény"-nek.
Innentől kezdve bármelyik (normál) makróban létre tudok hozni Hűtőszekrény típusú változókat.
Pl.
Sub Macro1
Dim hsz1 As Hűtőszekrény, hsz2 As Hűtőszekrény
Set hsz1 = New Hűtőszekrény
Set hsz2 = New Hűtőszekrény
'kód
'még több kód
End Sub
És akkor van két Hűtőszekrényem, amelyek kezelése, viselkedése egyforma, de mégis egymástól független objektumok.
Az egyiket kinyithatom, a másikat zárva tarthatom.
Az egyikből átrakhatok húst a másikba.
A Hűtőszekrény nevű típus összes tulajdonságát, eseményét, eljárásait a hozzá tartozó Class Module-on kell megírni, a szokásos VBA kóddal.
Én pl. egyszer írtam egy olyan objektumtípust, amivel ADODB kapcsolaton keresztül adatbázist kérdeztem le.
Olyan tulajdonságai voltak, hogy
- DBPath (adatbázis elérési útvonala)
- SQL
- Visszaadott rekordok 3 különböző módon (lista, tömb, RecordSet)
Olyan metódusai voltak, hogy
- Connect (kapcsolódik az elérési útvonalon megadott adatbázishoz)
- Execute (végrehajtja az SQL propertyben beadott SQL utasítást)
- Retrieve (lekérdezi az SQL propertyben beadott SQL lekérdezést)
Amikor használni akartam, csak annyi kellett, hogy:
Sub Macro1
Dim myQuery As clsQuery
Set myQuery = New clsQuery
With myQuery
.DBPath = "D:\mappa\DB.xls"
.Connect
.SQL = "SELECT FirstName, LastName FROM Employee"
.Retrieve
'és itt még kivenni belőle a visszaadott rekordokat
End With
End Sub
Párhuzamosan több clsQuery objektumom volt, egymástól függetlenek, mindegyikkel azt csináltam, amit akartam, de ha javítani kellett a kódon, vagy új funkcióval bővíteni a típust, akkor azt csak egy helyen kellett megtennem: a típust definiáló Class Module-on.
Egy kérdés: Hogyan tudom elérni, hogy a ScrolBar mutató húzásakor is látszódjon a hozzátartozó TextBoxban is a változás. Pillanatnyilag csak azt tudom elérni, hogy amikor elengedtem a mutatót, akkor mutatja csak az eredményt.
Emlékeztem, hogy volt Tőled ezzel kapcsolatban hsz. (Sőt, már magam is feltettem itt ezt a kérdést.)
A 15462-ben az előzményeket trölték, a 13636-nál szintén vannak már lyukak az előzményben.
A 9698 egy jó példa, kipróbáltam. Még tanulmányozom ezt is + amit találni külföldi fórumokon.
Sajnos még mindig nem értem a gyakorlati jelentőségét - pedig tuti hogy sok mindenre jó lenne. Viszont amíg nem értem, nem fog eszembe jutni, hogy ezt kell használnom :(
Sokszor érzem úgy, hogy egy-egy "fejlesztői projektet :)" lehetne jobban is csinálni, jó lenne továbblépni. Ezt a class modult meg csak évek óta nézem, hogy "ott van". Elég volt.
Segítségeteket kérném abban, hogy van-e valami megoldás arra, hogy az Excel 2010 ne hozzon létre ütközéses file-okat.
Szerintem azért hozza létre mert megnyitom egyszer majd nem figyelek és nyomok egy entert a TotalCommanderben a fileon de akkor nem a megnyitott excel-t hozza előtérbe hanem megnyitja újból. De ez csak feltételezés. Mindig csak azt veszem észre Total Comannderben, hogy van ütközéses file.
Esetleg mi más okból hozhat létre ütközéses file-okat?
"Viszont megtaláltam azt, ami nincs az eredetiben - a Calendar Control 11.0 vezérlőt - és ez jónak tűnik."
A Calendar Control vezérlővel vigyázni kell. A 11.0-ás naptár alapértelmezésben a 2003-as Office tartozéka, ami ráadásul az Office "szokásos" telepítéskor fel sem kerül a gépre. Tehát nem magától értetődő, hogy ha a kis programodat átviszed egy másik PC-re, akkor az ott működni is fog, még akkor sem, ha 2003-as Excel van rajta. Ha meg más verzió (bármelyik másik verzió), akkor szinte biztosan nem.
Megoldható persze, hogy a letöltöd az mscal.ocx 11.0-s verzióját, és telepíted mindegyik célgépre, csak macerás. Egyébként itt egy letöltési lehetőség és telepítési segédlet:
Wiki alatt kisbetűvel nem a Wikipédiát értem, amit nem is lehet ilyen célokra használni, hanem a wikiszoftvert. Az van benne, amit beleírsz. :-) Meg lehet csinálni korlátozott írhatóságúra is. Lehet kategorizálni, módosításokat visszakövetni és visszavonni, crosslinkelni stb. Word dokumentumot egyébként is nehéz publikussá tenni.
Egy pár ezer rekordos táblázatban memóriafoglalás szempontjából van-e különbség ha egy bonyolult összetett függvényt, egyben, több cellára elosztva vagy udf-ként használok?
A google témában igazad van, magam is mindig a google-vel keresek, és van, amikor elsőre jó találatot ad, de néha csak 2-3 óra után találok valamit, vagy legkésőbb addigra feladom. Most például egész délután gyűjtöm azoknak a Userform Toolbox vezérlőelemeknek a használatára vonatkozó ismereteket, amelyek sem a Kovalcsik könyvben nincsenek részletezve, sem az általam belinkelt - egyébként kiváló - tananyagban. Viszont megtaláltam azt, ami nincs az eredetiben - a Calendar Control 11.0 vezérlőt - és ez jónak tűnik.
SK-nak: Nem tudom, hogy gyűjtésre valóban a wiki-e a legalkalmasabb. Nem használtam még írásra, de úgy tudom, nem igazán megbízható. Állítólag könnyen belekerülhetnek téves információk. Akkor inkább maradok a saját megoldásomnál. Egy Word dokumentumban gyűjtögetem a linkeket, illetve ami letölthető, azt egy Excel Visual Basic nevű könyvtárba rakom.
még sosem használtam, de ha minden igaz arra jó, hogy saját objektumokat hozz létre. Ezeknek te adhatod meg, hogy milyen tulajdonságaik meg metódusaik legyenek és használhatod őket a makróidban. Szerintem magasabb szintű/komplexebb makróknál, VBA alapú alkalmazások fejlesztésénél lehet igazán hasznos.
használta már valaki vire az osztálymodulokat? Mire lehetnek jók ezek? Azt olvasom hogy nem használnak pl. memóriát. De nem találok anyagot a gyakorlati használatára.
Tegnap arról panaszkodtam, hogy mennyire nehéz összeszedni az Excel makróprogramozással kapcsolatos témakörökhöz a válaszokat.
Azután a keresgélés során olyat találtam, ami ugyan szintén nem ad választ az összes részletkérdésre, de olyan alapos, és közérthető (még a középszintű angolom ellenére is), hogy például a UserForm - ezen belül a MultiPage használatával kapcsolatos kérdésekben tökéletesen eligazítot. De ahogy elnézem a tartalomjegyzékét, a kezdő szinttől kezdve nagyon alapos, jól használható anyag. Ezért úgy gondolom, jótékony cselekedet, ha közzéteszem: http://www.ozgrid.com/Excel/free-training/ExcelVBA2/excel-vba2-index.htm
Viszont erről jut eszembe, hogy jó lenne egy olyan hely (és nem vagyok biztos benne, hogy ez egy fórum lehetne, mert abban elég hamar mélyre kerülnek az egyes hozzászólások), ahol összegyűjthetnénk a leghasznosabb hasonló tananyagokat. Esetleg létezik már ilyen?
Azt szeretném megkérdezni, hogy az excel beépített feltételes formázás funkcióját (amikor nyilakat , zászlókat, pipát stb lehet választani) lehet e ezt konfigurálni. Nekem az istenért sem sikerül.
Pl van egy számsor -3, 0, 10, -10, 13, 78 Azt szeretném elérni, hogy a 0 feletti értékeknél egy zöld nyil felfelé a 0 alattinál egy piros nyíl lefelé legyen, a 0-s érték pedig sárga nyil jobbra. Ha ráengedem a formázást akkor az lesz az eredmény, hogy a 78 as értéknél egy felfele zöld nyíl a többi piros le !
Így csak a számsor elemeihez tartozó számsor intervallumát vizsgálja a formázás , de ennek gyakorlatban kevésbé van értelme, (statisztikát általában viszonyszámokhoz mérünk és csak ritkán egymáshoz) tényleg ilyen bénán van megcsinálva, vagy én vagyok rosszul összerakva és valamit elbénázok ? :)
(Azt tudom, hogy sima szinezéssel meg lehet csinálni, de most ezek a nyilak kellenének)
Lehet, hogy nem erre gondoltál, de VBA-ban az amúgy simán excelből is elérhető függvények az Application.Worksheetfunction objektumon belül vannak. :D
Én eddig abban a hitben éltem, hogy minden excel függvény elérhető VBA-ból ily módon, de most ez megcáfolódott. (Mondjuk van megfelelője, ami egyszerűbb is, de akkor is.)