-
Fototrend
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
Új hozzászólás Aktív témák
- Battlefield 6
- Nintendo Switch 2
- Nvidia GPU-k jövője - amit tudni vélünk
- Kellemes karácsonyi ünnepeket!
- Magga: PLEX: multimédia az egész lakásban
- Vezeték nélküli fülhallgatók
- A nagy Szóda, Szódakészítés topic - legyen egy kis fröccs is! :-)
- Xbox tulajok OFF topicja
- Amlogic S905, S912 processzoros készülékek
- Tesla topik
- További aktív témák...
- Vírusirtó, Antivirus, VPN kulcsok GARANCIÁVAL!
- PC Game Pass előfizetés
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- Game Pass Ultimate előfizetések 1 - 36 hónapig azonnali kézbesítéssel a LEGOLCSÓBBAN! AKCIÓ!
- MEGA AKCIÓ! - Jogtiszta Windows - Office & Vírusirtó licencek- Azonnal - Számlával - Garanciával
- BESZÁMÍTÁS! MSI B450M R5 5600X 16GB DDR4 1TB SSD RX 6800 16GB Zalman S2 TG GIGABYTE 750W
- GYÖNYÖRŰ iPhone 14 128GB Midnight -1 ÉV GARANCIA - Kártyafüggetlen, MS4248,100% Akksi
- Bomba ár! HP ProBook 440 G5 - i5-8GEN I 8GB I 256GB SSD I HDMI I 14" FHD I Cam I W11 I Garancia!
- BESZÁMÍTÁS! Samsung S27D850T 27 75Hz PLS QHD 5ms monitor garanciával hibátlan működéssel
- Steam, EA, Ubisoft és GoG játékkulcsok, illetve Game Pass kedvező áron, egyenesen a kiadóktól!
Állásajánlatok
Cég: Laptopszaki Kft.
Város: Budapest
Cég: BroadBit Hungary Kft.
Város: Budakeszi
Fferi50
