„Excel-makro” változatai közötti eltérés
A Miau Wiki wikiből
(→Specialitások) |
(→Specialitások) |
||
185. sor: | 185. sor: | ||
***https://miau.my-x.hu/temp/demo/log | ***https://miau.my-x.hu/temp/demo/log | ||
***https://miau.my-x.hu/temp/demo/log.txt (a kiterjesztés nélküli állomány lett ellátva txt-kiterjesztéssel) | ***https://miau.my-x.hu/temp/demo/log.txt (a kiterjesztés nélküli állomány lett ellátva txt-kiterjesztéssel) | ||
+ | ***FreeFile: https://szlavip.web.elte.hu/Magamnak/VB/VB_le%EDr%E1s.pdf#page=353 | ||
*... | *... | ||
A lap 2022. október 12., 07:49-kori változata
A szócikk laptörténete (https://miau.my-x.hu/mediawiki/index.php?title=Excel-makro&action=history) felfogható egy autodidakta VBA-kurzus lehetséges lefolyásaként!
A szócikk célja, hogy tutoriál-ajánlások mellett rámutasson szemléletformáló részletekre a makró-írás kapcsán. A makró-rögzítésből ugyanis ritkán lesz pont az a funkcionalitás, amire tényleg szüksége van a felhasználónak. Így a makró-rögzítés utáni kód hatásos és hatékony átalakítása érdekében tudni kell, mi is a felhasználó valós mozgástere.
Egy Excel-tanfolyam lényege a szakmai vita, a ténylegesen megoldandó feladatokkal való közös azonosulás, az alternatívák és/vagy kockázatok feltárása, vagyis a miértek közös értelmezése. Ha nem az interaktivitás a cél, vagyis csak a hogyan a lényeg és a miért nem releváns, akkor tutoriálok kell készíteni/keresni/használni.
A programozás kapcsán a tudás életképes csírája az, amit egyszer már sikerült ténylegesen alkalmazni is a látottak, hallottak közül!
Tartalomjegyzék
Tutoriál-ajánlások
Gyors áttekintés/önteszt (17 kérdéskör): https://www.youtube.com/watch?v=S5awwOwnyhE (17 releváns tudnivaló kezdőknek - 16:35 EN) inkl. [tematika 5] Technikák/önteszt (7 kérdéskör): https://www.youtube.com/watch?v=RD5mi9ba_Ys (7 koncepcionális alapvetés kezdőknek - 16:03 - EN) inkl. [tematika 3 + tematika 1.4/2.1] Cellák kezelése (.cells) a VBA-ban/önteszt: https://www.youtube.com/watch?v=x_PCdMlO41M (1of4 - 05:56 - EN) inkl. [tematika 3] 2 of 4: https://www.youtube.com/watch?v=tlmFmcimIwU (06:21 - EN) 3 of 4: https://www.youtube.com/watch?v=oW2ZqqArIhA (05:24 - EN) 4 of 4: https://www.youtube.com/watch?v=rf8rK7rzoU0 (06:21 - EN)
- Fogalmi, stratégiai alapozás: https://www.youtube.com/watch?v=AEUKbrdTkiY (13:13 - HU) [tematika 1]
- Mi is az a VBA?
- Mit jelent a makró-rögzítés?
- Mit jelent az MS Office-hatókör (pl. Excel, Word, ...)?
- Videó-kommentárok:
- Makró-rögzítés indítása:
- ALT+F8 és/vagy menü:
- NÉZET
- MAKRÓK,
- ill. Fejlesztőeszközök menü-szalagról,
- valamint ALT+F11 (VBA-környezet indítása, ill.
- visszalépés az Excel-be, ALT+Q VBA bezárása ÉS visszatérés az Excel-be)
- ALT+F8 és/vagy menü:
- Makró-rögzítés típusa: abszolút (A1:B2) vagy relatív (S[1]O[1]) [tematika 1.2]
- Nem csak abban a munkafüzetben fut a felvett makró, ahol készült!
- Ha nem látható a menü-szalagon a fejlesztőeszközök opció, akkor
- FÁJL
- BEÁLLÍTÁSOK
- MENÜSZALAG TESTRE SZABÁSA
- Fejlesztőeszközök bekapcsolása (jobb oldali lista: inkl. kód, bővítmények, vezérlők, xml)<--vö. következő tutoriál (VBA-haladóknak)
- (s a videóban látható, a képernyő bal alsó részén lévő makrórögzítés/leállítás ikon innentől válik láthatóvá csak)
- Makró-rögzítés indítása:
- VBA haladóknak: https://www.youtube.com/watch?v=fg_A40nzq5Y (19:04 - HU) [tematika 2]
- Fejlesztőeszközök menü-szalag bekapcsolása/bemutatása
- Eseményvezérlés
- XLSM-alapú mentés
- Űrlap (form), gomb (button), címke (label) [tematika 6]
- Videó-kommentárok:
- Minden önmagában tesztelhető lépést tesztelni érdemes!
- A makrót indító billentyű-parancs esetén a CTRL már adott, tehát csak a SHIFT+G kell lenyomni majd a CTRL+SHIFT+G definiálásához.
- Lehetőség szerint ne használjunk foglalt billentyű-parancsokat.
- Billentyű-parancsok áttekintése: pl. https://support.microsoft.com/hu-hu/office/az-excel-billenty%C5%B1parancsai-1798d9d5-842a-42b8-9c99-9b7213f0040f
- Reprodukciós nézet: https://miau.my-x.hu/temp/demo/vba_open.xlsm [tematika 4]
- Többlet-szöveg
- If/then egysoros nézete (vö. "_" sortörés lehetősége a kódírás során)
- Event handling: https://www.youtube.com/watch?v=Z2brmJ1iqCk (09:44 - EN) [tematika 3]
- Munkalap-specifikus kódírás (private sub)
- Angol nyelvű szakszavak
- Objektum-orientáltság (pl. munkalap_esemény)
- User forms: https://www.youtube.com/watch?v=1hmuvovrMDw (11:42- EN)
- ...
- Project explorer / Projekt tallózó: [tematika 2.3]
- https://www.youtube.com/watch?v=dglaT9H7ZNk (01:14 - EN)
- https://www.youtube.com/watch?v=q7jdCP3CdkI (02:21 - EN)
- CTRL+R
- Object explorer / Objektum tallózó: [tematika 2.6]
- https://www.youtube.com/watch?v=d95AvpgmfWQ (04:38 - EN)
- A súgó minden listaelemre elérhető (zömmel angolul / online / jobb egérgombon keresztül - az adott elemre kattintva): pl. https://learn.microsoft.com/hu-hu/office/vba/api/excel.application.calculate?f1url=%3FappId%3DDev11IDEF1%26l%3Dhu-HU%26k%3Dk(vbaxl10.chm183084)%3Bk(TargetFrameworkMoniker-Office.Version%3Dv16)%26rd%3Dtrue
- F2
- Properties window / tulajdonság ablak [tematika 2.4]
- https://www.youtube.com/watch?v=dglaT9H7ZNk (01:14 - EN)
- https://www.youtube.com/watch?v=v9ml70RUBVs (04:10 - EN)
- F4
- Hibakezelés, hibakódok (szöveges segédanyagok): [tematika 5]
- https://hu.excel-lib.net/11705448-excel-vba-error-handling-all-you-need-to-know (HU)
- https://hu.know-base.net/7580102-vba-error-handling (HU)
- https://hu.excel-lib.com/11705873-error-handling (HU)
- https://hu.education-wiki.com/8318574-vba-error-handling (HU)
- https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/s6da8809(v=vs.100)?redirectedfrom=MSDN (EN) <--forrás: https://www.excelforum.com/excel-programming-vba-macros/601056-list-of-runtime-error-codes.html (EN)
- Error codes (lista): https://chejunkie.com/knowledge-base/common-runtime-error-codes-vba/ (EN)
- Error codes (lista): https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-basic-6/aa264975(v=vs.60)?redirectedfrom=MSDN (EN)
- Error codes (lista-generálás): https://learn.microsoft.com/hu-hu/office/vba/Language/Reference/User-Interface-Help/application-defined-or-object-defined-error (EN)
- Beállítások elérése:
- TOOLS
- OPTIONS
- Form controls / Űrlapvezérlők: [tematika 6]
- https://hu.excel-lib.com/11705621-checkbox (jelölő négyzet / szöveges, HU)
- Makró-futtatás tiltásának manuális feloldása:
- Gyakorló feladatok:
- http://miau.my-x.hu/miau/236/3333_makro_versions.xlsm (csak kód)
- https://miau.my-x.hu/digeco/coco_prg1.xlsm (csak kód)
- !!!ÉLŐ PROBLÉMA-MEGOLDÁS (angolul): https://www.youtube.com/watch?v=zA_Q_Yws0gQ (43:32 - EN) + Makró nélkül?! (https://miau.my-x.hu/temp/demo/minden_harmadik_adat_transzponalasa.xlsx) + Alternatív makró rögzítéssel: https://miau.my-x.hu/temp/demo/minden_harmadik_adat_transzponalasa.xlsm
- Konklúziók:
- Nem a megvalósítás (kódírás) a kritikus általában, hanem a megvalósítandó lépések matematikailag/logikailag korrekt tervezése (vö. vagyis az ötlet maga)!
- Az Excel beépített függvényei, funkciói általában gyorsabbak, mint bármi más, amit a felhasználó meg tud programozni...
- A gyorsaság mellett a memória terheltsége is lehet fontos...
- A makró-rögzítés keretében keletkező kód beégetődő paramétereit általában felül kell vezérelni (tudni)...
- Egy program szinte soha nincs készen, mert egyes komponensei nem elég univerzálisak, de ami adott, az lehet éppen már működőképes... (vö. FOR-ciklus hossza manuálisan, vagy DO-UNTIL-LOOP-ciklus)...
- A kódírás közgazdasági kérdés (vö. információs többletérték): egy kód nem kerülhet többe, mint amennyi hasznot elvárunk tőle...
- A makró-rögzítés során alkalmazott megoldási logika általában eltér a kódírás során felmerülő (quasi tisztán matematikai) megoldások logikáitól... (vö. transzponálás, szűrés vs. ciklusok vezérlése)...
- Minden ötltet azonnal és kicsi méretben ellenőrizni kell (vö. pl. debug, F8, watch) és már az első hibánál le kell cserélni/finomítani kell az ötletet...
- ...
Szöveges segédanyagok
- Esemény-vezérlők:
- Paraméterezések:
- https://excelribbon.tips.net/T010030_Specifying_Location_for_a_Message_Box.html (message_box helyett input_box)
- Változók/tömbök:
- https://xlmotyo.hu/blog/tombok-vba-ban/ (HU) (inkl. Option Base1és Option Explicit - https://excelkingdom.blogspot.com/2012/10/option-explicit.html)
- Tudnivalók az Active X megoldásokról:
- Pivot funkciók numerikus kódjai:
- Másolás, beillesztés:
- ...(ide minden olyan forrás felsorolása indokolt, melyekre valakinek legalább egyszer érdemes volt rákeresnie)...
Programozás-filozófiai alapvetések
- A VBA olyan speciális keretrendszer, ahol
- a grafikus interfész egy része = maga az Excel normál nézete
- a grafikus interfész másik része pl. a VBA-alapú űrlapok, vezérlők
- s a normál Excel-felületen lehetséges olyan manuális adatfeldolgozási logika kialakítása
- és makró-rögzítéssel való hibátlan (esetlegesen hiányos) kóddá konvertálása
- mely kódrészletek felfogható egy építőanyag-raktárban tárolt erőforrásoknak
- s ezen erőforrások (építőanyagok: pl. szűrés, pivot, diagram, cellába is írható függvények, stb.) kapcsán a makrórögzítés egyedi (beégetett) paraméterei
- programkódból felülvezérelhetők
- így az építőanyagok eset-specifikusan testre szabhatók
- s végül az épület (a program) ezen speciálisan felparaméterezett építőanyagok megfelelő sorrendű kapcsolatát jelentik...
- Az objektum-orientáltság látszólag már áttekinthetetlen kombinatorikai/lehetőségi teret jelent, mely azonban inkább segít, mint hátráltat.
- A VBA használható természetesen mindennemű grafikus felület bármilyen jellegű (vö. input/output) bevonása nélkül is (vö. változók definiálása, memória-alapú adatfeldolgozás).
- A VBA használata annál indokoltabb, minél inkább sikerül a makró-rögzítővel előre legyártható sablonokra (építőanyagokra) támaszkodni.
- Kódot "csak" a sablonok testre szabását illetően érdemes írni.
- Minden funkció, amit mások már függvényként, vagy más módon előkészítettek, saját kódból is előállíthatók, de ezek a megoldások általában sokkal lassabbak lesznek.
- A VBA-programírás lényege a sablonok testre szabásának képessége, vagyis hogy az azokba látszólag beégetett értékeket tetszőlegesen vezérelhető változókká és/vagy grafikus felületről érkező inputok tartalmává tudjuk alakítani.
- Hasonlóképpen a programozási tudás fokmérője az Excel/VBA beépített funkcionalitásainak megkerülni tudása (pl. diagramok automatikus sorszámozásának programozó általi vezérelni tudása, vagy ennek megkerülése, pl. legrosszabb esetben is a teljes munkafüzet bezárásán és újra indításán keresztül).
- A jó programozó nem (csak) az, aki minden kérdésre azonnal és fejből tudja a választ, hanem az, aki képes az online tutoriálok, fórumok erdejében minél gyorsabban eligazodni.
- A programírás kevésbé a hogyan valósítsunk meg egy jól átgondolt adatfeldolgozási lépéssort problémájának kezelését jelenti, mint magának a megprogramozandó lépéssornak a minél inkább VBA-specifikus megtervezését.
- ...
Tanfolyami vezér-feladatok
- Alkossunk meg egy 8 rétegű személyiségprofil-készítő rendszert a 2DM játék log-adatai alapján méret-függetlenül, de minél kevesebb kódírással a makrórögzítési szakaszok után!
- https://miau.my-x.hu/temp/demo/robot_profiling_macro_f1.xlsm (első elemzési réteg)
- https://miau.my-x.hu/temp/demo/robot_profiling_macro_select.xlsm (paraméterezési demo)
- https://miau.my-x.hu/temp/demo/robot_profiling_macro_f2.xlsm (második elemzési réteg inkl. paraméterezési demo)
- f3-f4-f5-f6-f7-f8 (ASAP)
- ...
Specialitások
- Goto/Gosub (VBA-használat mindennemű Excel-kötődés/felületi kapcsolat nélkül quasi tisztán matematikai célokra):
- https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/gosubreturn-statement (EN, TXT)
- Gyakorló feladat: https://miau.my-x.hu/temp/demo/no_excel_goto_gosub.xlsm
- Kommentárok:
- nem mindegy hol kerül az RND() érték inicializálásra szakasz1 előtt, vagy után
- érdemes felkészülni minden esetben arra, hogy a programlogika téves és végtelen ciklus/futásidő igény alakul ki
- Végtelen programfutás megszakításának lehetőségei: pl. https://hu.excel-lib.com/11705874-interrupt-a-macro (HU, TXT) + https://www.google.com/search?q=ctrl+break+on+dell+laptop (ctrl+break billentyű-kombináció beazonosítása pl. DELL laptopokon)
- Paraméter-átadás sub-ok között modulon belül:
- https://learn.microsoft.com/en-us/office/vba/language/concepts/getting-started/calling-sub-and-function-procedures (EN, TXT)
- Gyakorló feladat: https://miau.my-x.hu/temp/demo/no_excel_sub2sub.xlsm
- Kommentárok:
- A goto/gosub logikából egyes részletek átemelésre kerültek szakasz1() és szakasz2() sub()-okba egymásra láncolva meghívva ezeket (Call)
- A változók átadása a Call név(változó1, változó2, ...) alapon történik.
- A változók fogadása a sub létrehozásakor is a fenti logikát követi sub név(változó1, változó2, ...).
- Nem minden változót kell átadni modulon belül, hogy a fő működés teljesüljön.
- Változók átadása modulok között:
- Paraméter-átadás Excel-file-ok között:
- https://prog.hu/tudastar/202388/vba-parameter-vagy-valtozo-atadas-excel-fajlok-kozott
- Gyakorló feladatok: https://miau.my-x.hu/temp/demo/no_excel_file2file_aaa.xlsm + https://miau.my-x.hu/temp/demo/no_excel_file2file_bbb.xlsm (vö. elsofile() sub indítása)
- Tömbök:
- Képletek cellába írása (abszolút és relatív hivatkozásokkal)
- Excel-verziók hatásai: https://miau.my-x.hu/mediawiki/index.php/Makro-parok-1 (2016 vs 365)
- Fájlból olvasás, fájlba írás:
- https://software-solutions-online.com/vba-open-files/ (EN - TXT)
- Gyakorló feladat: https://miau.my-x.hu/temp/demo/fajlbol_olvasas_fajlba_iras.xlsm
- https://miau.my-x.hu/temp/demo/log2.csv
- https://miau.my-x.hu/temp/demo/log
- https://miau.my-x.hu/temp/demo/log.txt (a kiterjesztés nélküli állomány lett ellátva txt-kiterjesztéssel)
- FreeFile: https://szlavip.web.elte.hu/Magamnak/VB/VB_le%EDr%E1s.pdf#page=353
- ...
Releváns témakörök
Egyes kulcsszavak angolul: pl. https://iqjb.hu/tanfolyamok/microsoft/microsoft-excel-word-powerpoint-project-access/feladatok-automatizalasa-a-microsoft-excel-ben-i
- 1. Makrók
- 1.1. Makrók rögzítése
- 1.2. Felvételi jellemzők beállítása
- 1.3. Makrók tesztelése, futtatása
- 1.4. Rögzített makrók kódjának vizsgálata
- 2. Program fejlesztői környezet
- 2.1. Makrók kódjának módosítása
- 2.2. VBA fejlesztői környezet
- 2.3. Projekt tallózó
- 2.4. Tulajdonság ablak
- 2.5. Kódszerkesztő
- 2.6. Objektumtallózó
- 2.7. Hibakeresés ablakai
- 3. VBA objektumai
- 3.1. Az objektum orientált programozás alapjai
- 3.2. Az Excel objektum modellje
- 3.3. Munkafüzet, munkalap, sorok, oszlopok, cellák objektum műveletei
- 4. VBA nyelv elemei
- 4.1. Változók
- 4.2. Vezérlési szerkezetek
- 4.3. Eljárások, függvények
- 4.4. Munkalap függvények használata VBA-ban
- 5. Hibakeresés
- 5.1. Hibakeresés, nyomonkövetés
- 5.2. Hibák típusai
- 5.3. Nyomonkövetés, lépésenkénti végrehajtás
- 5.4. Nyomonkövetés ablakai
- 5.5. Hibakezelés
- 6. Vezérlők alkalmazása
- 6.1. Vezérlők elhelyezése az Excel munkalapon
- 6.2. Nyomógomb, adatbeviteli mezők, választókapcsolók, jelölőnégyzet, kombinált lista, görgetősáv
- 6.3. Vezérlők hozzárendelés makrókhoz
- 6.4. Különbségek a munkalapi vezérlők és a VBA vezérlők között