Hirdetés
-
PROHARDVER!
A Microsoft Excel topic célja segítséget kérni és nyújtani Excellel kapcsolatos problémákra.
Kérdés felvetése előtt olvasd el, ha még nem tetted.
Új hozzászólás Aktív témák
-
Mutt
senior tag
Szia,
Szerintem itt fontos tisztázni azt, hogy amit a Personal.xlsb "Workbook_Open" eseményébe teszel, akkor az csak egyszer fog lefutni, amikor az Excel indulásakor az egyéni makrófüzet a háttérben megnyílik.
Azt akarod, hogy minden Excel fájl megnyitásakor legyen vmi ellenőrzés és azt ahogy tetted egy Class Module-al lehet megtenni.
Próbáld ki:
1. Personal.xlsb-ben legyen egy class module, a neve fontos clsApp legyen (ha más akkor a másik modulban kell módosítani). A tartalma pedig ez:Public WithEvents AppEvents As ApplicationPrivate Sub AppEvents_WorkbookOpen(ByVal wb As Excel.Workbook)Call OpenEvent(wb)End SubPrivate Sub AppEvents_WorkbookBeforeClose(ByVal wb As Workbook, Cancel As Boolean)Call BeforeClose(wb, Cancel)End SubAhogy látható két workbook eventhez (open és a beforeclose) rendeljük a saját kódunkat.
2. A Personal.xlsb-ben legyen egy normál modul amibe az alábbi kódok kellenek:
Dim AppObject As New clsAppSub Init()'ezt az egyéni makrófüzet Open eseményében fogjuk meghívniSet AppObject.AppEvents = ApplicationEnd SubSub OpenEvent(wb As Workbook)'ez az egyéni Workbook_Open eseményünk ahova tesszük a saját kódot'a megnyitott fájl ellenőrzése (a példában ha M-el kezdődik a neve)If wb.Name Like "M*" Then'hozzáadjuk a kedvenc makrónkat az eszköztárhozCall AddNewMenuItemEnd IfEnd Sub3. A Personal.xlsb ThisWorkbook eseményeibe pedig tegyük ezt be:
Private Sub Workbook_Open()Call InitEnd SubPrivate Sub Workbook_BeforeClose(Cancel As Boolean)Call DeleteControls(True)End SubVagyis amikor elindítjuk az Excel-t, akkor az "Init" kódban megadott sor lefut, ami annyit tesz, hogy egy objektumot hoz létre ami tartalmazza az Excelben megnyitott fájlokat.
A másik pedig ha bezártuk az Excel-t teljesen, akkor előtte töröljük a saját menűt.4. Az egyéni parancs eszköztárra (QAT) kihelyezése.
Gyorselérési eszköztárra nem raktam még kóddal ki gombot, de a https://jkp-ads.com/rdb/win/s2/win004.htm oldalon találtam egy hasznos add-int, aminek a kódja szerint ez könnyen megy, de nekem nem jött össze. Az addin ettől még szuper, ha van sok saját makród, akkor ezzel tudod rendszerezni és elérni QAT-ról.Ami ment az egy új menű az eszköztáron. Én régen ezt használtam, MS365-ben most is megy.
Szóval van a normál modulban még 2 program, ami felteszi illetve leveszi a saját makródat.
Ami felteszi az így néz ki:
Private Sub AddNewMenuItem()'töröljük az esetleg létező saját menűtDeleteControlsDim CmdBar As CommandBarDim CmdBarMenuItem As CommandBarControlSet CmdBar = Application.CommandBars("Worksheet Menu Bar")'Add a new menu itemSet CmdBarMenuItem = CmdBar.Controls(CmdBar.Controls.Count - 1).Controls.Add'Set the properties for the new controlWith CmdBarMenuItem.Caption = "Saját Makró1".OnAction = "'" & ThisWorkbook.Name & "'!Kedvencem".Tag = C_TAGEnd WithEnd SubEhhez van egy C_TAG állandó a modul elején definiálva:
Private Const C_TAG = "Makrocska" 'C_TAG legyen egyedi névIlletve fent a kódban az OnAction végén van a makró neve (esetemben "Kedvencem"),
ami ennyit tartalmaz csak:Sub Kedvencem()MsgBox "Palacsinta", vbOKOnlyEnd SubAmi leveszi az pedig ez:
Sub DeleteControls(Optional tuti As Boolean = False)Dim Ctrl As CommandBarControlOn Error Resume NextSet Ctrl = Application.CommandBars.FindControl(Tag:=C_TAG)Do Until Ctrl Is NothingCtrl.DeleteSet Ctrl = Application.CommandBars.FindControl(Tag:=C_TAG)LoopEnd SubA fenti kódokkal el tudtam érni, amit szerettél volna:
1. Akár jelszavas fájlok esetén is (csak a megfelelő jelszó ismeretében) fut le az open esemény...
2. ami a kritériumoknak megfelelően (a példámban csak az nézem hogy a fájl neve M-el kezdődik-e vagy sem) kirak egy makrót az eszköztárra...
3. az Excel bezárásakor pedig leveszi a dolgokat.Próbáld ki, ha még kell.
A kódok alapja a Walkenbach VBA könyve (17-es fejezet). Régi (az újabbak sem hinném hogy rosszabbak), de még mindig nagyon jó. Én csak ajánlani tudom angolul tudóknak.Két fontos dolog:
1) Saját makrók esetén fontos tudni jól használni a Thisworkbook és Activeworkbook-ot.
2) Én inkább fixen kiraknám a makrót a QAT-ra és a makrót készíteném fel arra, hogy ha a fájl nem felel meg a feltételeknek akkor ne csináljon vele semmit.üdv
-
Pá
addikt
Lehet, hogy kicsit kuszán írtam mit szeretnék.
Szóval a lényeg és, ami fontos, hogy a Personal.xlsb-m ThisWorkbook részébe tennék egy Workbook_Open subot, aminek az lenne a célja, hogy bizonyos szempontból automatikusan megvizsgáljon mindegy egyes excel-t, amit megnyitok.
Az a problémám, hogy az excelek egy része jelszóval védett, amiket megnyitok. És úgy kéne ezt a subot beállítani, hogy a jelszóval védett exceleknél várja meg, amíg megadom a jelszót, mielőtt lefut.
Igazából nem tudom, hogy excelben van-e bármi jele, hogy megkapta a jelszót a file és ehhez tudnám kötni a macro futását.
MsgBox-szal tesztelgettem a workbook open-t de jellemzően már azelőtt elkezdte dobálni a MsgBoxot, mielőtt egyáltalán feljött a jelszó kérő ablak, szóval valahogy késleltetni kéne a macrot addig.
Új hozzászólás Aktív témák
- ÁRGARANCIA!Épített KomPhone Ryzen 7 7700X 32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- HIBÁTLAN iPhone 13 mini 128GB Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS3139, 100% Akkumulátor
- BESZÁMÍTÁS! MSI Z270 GAMING PRO CARBON alaplap garanciával hibátlan működéssel
- ÚJ ELEKTROMOS ROLLER!! 2/3 áron és e-bike dobozban, 1 év garanciával:
- ASUS TUF A15 FA507 - 15.6"FHD 144Hz - Ryzen 7 7435HS - 16GB - 1TB - Win - RTX 4050 - 2,5 év garancia
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: NetGo.hu Kft.
Város: Gödöllő
Fferi50

