Makrók használata az Excelben - munkafüzet open eseményéhez VBA-eljárás létrehozása Az Auto_Open makróval kapcsolatos fenti korlátozások megkerülhetők az Open eseményhez rendelt VBA-eljárással. Példa Auto_open makró készítése 1. Ideiglenesen engedélyezzük az összes makrót! Ehhez a kattintsunk a Fejlesztőeszközök lap Kód csoportjában Makróvédelem gombra! 2. Az Adatvédelmi központ párbeszédpanel Makróbeállítások kategóriájában, a Makróbeállítások csoportban válasszuk az Összes makró engedélyezése (nem javasolt, mert veszélyes kód futtatását is lehetővé teszi) kapcsolót! Utána kattintsunk az OK gombra! (A védelem érdekében a feladat végrehajtása után állítsuk vissza az Összes makró letiltása értesítéssel állapotot). 3. Mentsük és zárjuk be az összes megnyitott munkafüzetet! 4. Nyissuk meg azt a munkafüzetet, amelyhez a makrót szeretnénk hozzáadni, vagy készítsünk egy új munkafüzetet! 5. Adjuk ki a Fejlesztőeszközök lap Kód csoportjának a Visual Basic parancsát, vagy nyomjuk meg az Alt+F11 billentyűkombinációt! 6. A projektböngésző ablakában kattintson a jobb gombbal a ThisWorkbook objektumra, és adjuk ki a helyi menü View Code (Kód megtekintése) parancsát! (Ha a projektböngésző ablak nem látható, adjuk ki a View menü Project Explorer parancsát). A kódszerkesztő megjelenítése a VBA ablakban 7. A Code ablak feletti Object listában válasszuk a Workbook elemet! Ekkor automatikusan létrejön egy üres eljárás az Open eseményhez (lásd az ábrán).
8. Bővítsük ki az eljárást a következő sorokkal: Private Sub Workbook_Open() MsgBox Date ' egy üzenetpanelen megjeleníti az aktuális dátumot Worksheets("Sheet1").Range("A1").Value = Date ' az A1 cellában is rögzíti 9. Zárjuk be a VBA, majd az Excel ablakot! 10. Nyissuk meg újra a munkafüzetet! Ekkor az Excel futtatja a Workbook_Open eljárást. 11. Az üzenetpanelt az OK gombbal zárjuk be. Feladat: Párbeszédpanel megjelenítése a munkafüzet megnyitásakor Készítsünk olyan párbeszédpanelt, amely a munkafüzet betöltésekor megjelenik és a felhasználó választásától függően más-más cellatartományt tesz védetté! Tipikusan ilyen felhasználói körbe tartoznak az egy munkalapot a feldolgozás különféle szintjein használó alkalmazók (például alapadat-rögzítés, manipulálás, ellenőrzés). Készítsünk olyan nyomógombokat, amelyek megoldják a dátum beillesztését és a kilépést. A megoldáshoz a Visual Basic programot alkalmazzuk. Ezt a feladatot a munkafüzetben külön gombbal tesszük indíthatóvá, hogy más Auto_Open eljárással ne ütközzön (ezért az ehhez a feladathoz szükséges Auto_Open eljárást Indítás eljárásnak nevezzük). A következő leírás természetesen az önálló, külön munkafüzet használatát tételezi fel. Megoldás Kiinduló adatok 1. Hozzunk létre egy munkafüzetet egyetlen, 1.Feladat nevű munkalappal! Töltsük fel az A1:O6 tartományt a kiindulási adatokkal. Formázzuk az ábra szerint a munkalapot. 2. Hozzuk létre az ábra szerinti párbeszédpanelt 1.Feladat (Panel) néven! A választókapcsolókat az A4 cellához csatoljuk. A védelmet vezérlő párbeszédpanel 3. Hozzunk létre három modult a Visual Basic ablakában. Nyomjuk meg a Ctrl+R billentyűkombinációt vagy a View (Nézet) menü Project Explorer (Projekttallózó) parancsával jelenítsük meg a képernyő bal oldalán a projektek listáját. Kattintsunk a
jobb egérgombbal aktuális munkafüzetünk VBA projektjére, és adjuk ki a helyi menü Insert Module (Beszúrás Modul) parancsát! 4. Írjuk be a következő kódot a Visual Basic szerkesztőablakba: Gombok modulhoz: Sub Dátum() ' Dátum bevitele a megadott cellába vagy hibaüzenet azoknál a celláknál, amelyek nem dátum típusúak. Természetesen lehet nagyobb táblát is kezelni, ekkor a C7:C16384 tartomány-hivatkozást állítsuk nagyobbra! On Error Resume Next If Not (Application.Intersect(ActiveCell, Range("C3,C4,G3,G4,C7:C16384")) Is Nothing) Then ActiveCell.FormulaR1C1 = Date Else MsgBox ("Ebbe a mezőbe nem lehet dátumot beírni!") End If Sub Mentes_Kilepes() Response = MsgBox("Valóban ki akar lépni?", vbyesno) If Response = vbyes Then VédelemFeloldás For Each w In Application.Workbooks w.save Next w Application.Quit End If Start modulhoz: Sub Auto_Open() ' Ezt a 2010feladatok1.xlsm munkafüzetben Indítás néven hozzuk létre Worksheets("1.Feladat").Activate VédelemFeloldás ActiveWorkbook.Worksheets("1.Feladat").Cells(1, 2).Value = "" DialogSheets("1.Feladat(Panel)").Show most a C2 cellában fogadjuk a cellacsatolás eredményét, azaz melyik munkahely választókapcsolóját nyomták meg i = ActiveWorkbook.Worksheets("1.Feladat").Cells(1, 4).Value Select Case i Case 1 ActiveWorkbook.Worksheets("1.Feladat").Cells(1, 2).Value = "RÖGZÍTÉS" Rögzítésvédelem Case 2 ActiveWorkbook.Worksheets("1.Feladat").Cells(1, 2).Value = "FELDOLGOZÁS" Feldolgozásvédelem Case 3 ActiveWorkbook.Worksheets("1.Feladat").Cells(1, 2).Value = "ELLENŐRZÉS" Ellenőrzésvédelem End Select
Védelmek modulhoz: Sub VédelemFeloldás() Cells.Select ActiveSheet.Unprotect Selection.Locked = True Range("A1").Select Range("A1").Activate Sub Rögzítésvédelem() Range("C3:C4,A7:E16384").Select Range("C3").Select Range("C3").Activate Sub Feldolgozásvédelem() Range("G4,F7:G16384").Select Range("G4").Select Range("G4").Activate Sub Ellenőrzésvédelem() Range("G3,H7:I16384").Select Range("G3").Select Range("G3").Activate 5. Hozzuk létre a munkalapon a Dátum nevű nyomógombot, amelyhez a Dátum makrót rendeljük. 6. Hozzuk létre a munkalapon a Kilépés nevű nyomógombot, amelyhez a Kilépés makrót rendeljük. 7. Az A4 cella rögzíti az első párbeszédpanelen végzett választást. Hogy ez a szám ne jelenjen meg, formázzuk fehér szövegszínre! 8. Mentsük el a munkalapot, majd töltsük be és figyeljük meg a védelem működését. A védett lapon csak a nem védett cellákba vihetünk be adatokat. A cellák védelmét pedig a munkahelynek megfelelően oldottuk fel. A kiválasztott munkahely neve nagy betűkkel megjelenik a B1 cellában.
Ha nem az Auto_open eljárást használjuk, akkor hozzunk létre egy nyomógombot, amit kapcsoljuk az Indítás makróhoz.