Hirdetés
- Jhonny06: Új gépsárkány
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- Magga: PLEX: multimédia az egész lakásban
- laca223: Miért győz a kollektív meggyőződés akkor is, ha saját magát teszi tönkre?
- Luck Dragon: Alza kuponok – aktuális kedvezmények, tippek és tapasztalatok (külön igényre)
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- GoodSpeed: Munkaügyi helyzet Hajdú-Biharban: észak és dél
- sziku69: Szólánc.
- Geri Bátyó: Agglegénykonyha 10 – Alapanyagok/készételek többféle felhasználása
-
LOGOUT
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
- HIBÁTLAN iPhone 12 Pro Max 128GB Pacific Blue -1 ÉV GARANCIA - Kártyafüggetlen, 100% Akkumulátor
- Samsung Galaxy Z Fold4 Graygreen Duplakijelzős produktivitás, 120 Hz, Garancia 2026. 03. 22-ig
- Macbook Pro M3 Max 16" - 64 GB/4TB/ AJÁNDÉK MAGIC KEYBOARD 3/ 27% ÁFÁS!
- Apple iPhone 15 Pro Max - Blue Titanium - 256GB - Akku: 84% - Megkímélt állapot!
- Nvidia Quadro P4000 // Nvidia Quadro P5000 --- Budapest MPL Foxpost
Állásajánlatok
Cég: Laptopszaki Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Fferi50
