Kezdőlap › Fórumok › Excel programozás › [Resolved] Private Sub Worksheet_Activate makró futtatása egy másik munkalapról
- This topic has 7 hozzászólás, 2 résztvevő, and was last updated 3 years, 4 months telt el by horvimi.
-
SzerzőBejegyzés
-
2021-08-05-14:13 #8707
Sziasztok!
Tudnátok a következő problémában segíteni?:
Hogyan tudnám azt elérni, hogy egy bizonyos cella megváltozása miatt, egy másik munkalapon lefusson egy makró, illetve igazából az összes munkalapon lefusson az az egy és majdnem ugyanaz a makró. Ezek a makrók „Private Sub Worksheet_Activate”-ként vannak megírva az adott munkalapokon és emiatt nem tudom őket simán a „Call” paranccsal meghívni.
A konkrét probléma az, hogy van egy legördülő listám, ami egy másik munkalapról kapja az adatokat, ezek a bizonyos adatok változnak(attól függően, hogy mit választok ki), de ezt csak akkor frissíti a legördülő lista, ha átmegyek arra a munkalapra, ahol egy makró létrehozza az adatokat, amiből táplálkozik a lista és ugye lefut a makró.
Előre is köszönöm, ha valaki tud rá megoldást!
2021-08-05-18:01 #8708Szia!
Hát, nagyrészt értem, amit szeretnél. Nem biztos, hogy teljesen.
Kicsit olyan, mint a róka fogta csuka.
Addig értem, hogy egy listából kiválasztasz egy elemet, és az ugye az adott cellára Change esemény lesz, és erre egy másik lapon szeretnél egy vagy több listaforrást frissíteni makróval.
Ami ezután jön, az nem világos, hogy egy másik legördülő menü forrásást készíted elő ezzel vagy ugyanazét?A kérdésedre:
– A munkalapok Activate eseménykezelőjét átrakhatod egy modulba (Sub bármi) és az Activate kezelőkben csak egy Call van erre a subra.
Ezáltal egy másik munkalap eseménykezelőjében is lehetne Call-al hívni.Az kicsit nehezíti a dolgot, ha „majdnem” ugyanaz a makró fut le a többi munkalapon…
Imre
2021-08-05-20:57 #8709Kedves Imre!
Köszönöm a segítséget, az ötlet működik a „modulos” megoldásnak hála tudom használni a call parancsot, de nem okozta a kívánt eredményt.
Megfogalmazom újra a problémát, hátha jobban el tudom mondani:
A 2. számú munkalapon van egy makró, aminek az eredménye néhány szám egy oszlopban. Ezeket hivatkozom meg az 1. számú munkalapon és gyűjtöm őket egy listába. Ezek a számok az alapján változnak, hogy az 1. számú munkalapon egy legördülő listában mi van kiválasztva. És a probléma, hogy mikor kiválasztok valamit a listából(az 1.számú munkalapon), akkor a 2.számú munkalapon lévő makró ugye nem fut le csak akkor, ha átmegyek arra a munkalapra(2. számú). És ezt szeretném elkerülni, erre szerettem volna valami makrót írni, egy makrót az 1.számú munkalapon ami a „háttérben” lefuttatja a 2. számú lapon lévő makrót.
Nem olyan bonyolult, csak nehéz megfogalmazni a sok oda-vissza hivatkozások miatt.
Van esetleg ötlete erre a problémára?A korábbi és esetleges későbbi válaszát nagyon szépen köszönöm!
2021-08-06-11:32 #8714Ebben az esetben munkafüzet eseménykezelést kell használnod.
1. Projekt ablakban dupla klikk a „ThisWorbook” objektumon
2. Jobb oldalon felül bal oldalt General helyett Workbook
3. Jobb oldalon felül jobb oldalt lesznek a Workbook események.Neked a SheetChange esemény kell. Paraméterben megkapod, hogy melyik lapon (Sh) melyik cella (Target) változott.
Ha az 1-es lapon tehát változik a lista értéke, akkor a futtathatsz bármit, ami a másik lapon csinál valamit. Ilyenkor célszerű a SELECT-eket kerülni, de az sem baj persze.
Imre
2021-08-06-13:30 #8715Kedves Imre!
Ismét köszönöm a válaszát, kezdem azt gondolni, hogy megoldható a problémám. Sajnos nem rég óta ismerkedem a VBA-vel, főként videókból és cikkekből.
Röviden meg tudná mutatni, hogy mi lenne a szintaktika, mert nem igazán sikerül nekem beírni. Tehát, ha bent vagyok a SheetChange-ben, akkor azt hogyan tudnám beírni, hogy: ha megváltozik x cella az 1-es munkalapon, akkor fusson le a háttérben a 2-es munkalapon lévő makró, amit a korábbi javaslatát megfogadva egy külön modulba raktam és a munkalapon csak azt hívtam meg worksheet_activattel.
Előre is köszönöm!Üdv,
Dani2021-08-06-19:33 #8716Eseménykezelő
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Sh.Name = "Munka1" And Target.Address = "$B$3" Then Call valami End If End Sub
Modulban, hogy mit kel csinálni
Sub valami() Sheets("Munka2").Range("A2").Value = "hello" End Sub
Hát egyedül nem könnyű.
Ajánlom figyelmedbehttps://videotanfolyam.pentaschool.hu/courses/excel-automatizalas-makrok-alapjai
Imre
- A hozzászólás módosításra került: 3 years, 4 months telt el-horvimi.
2021-08-06-20:15 #8718Köszönöm szépen megint, de valamiért nem fogadja el ezeket a sorokat, azt írja, hogy „Subscript out of range”.
2021-08-07-20:06 #8719Bocsánat, hogy ezt írom, de anélkül nem lehet internetről sem tanulni, amíg az alapokkal valahogy tisztába nem kerülsz.
A kód, amit leírtam, a Munka1 és Munka2 munkalapokkal dolgozik, és kipróbáltam mielőtt elküldtem
Valószínűleg nálad nem ezek a lapok nevei, ekkor ad ilyen hibát.
Bele van írva fixen, idézőjelekbe foglalva a munkalap neve, és az address után az is látszik, hogy a Munka1-en a B3 cella értékét figyeli, és ha az változik, csak akkor hívja meg a másik munkalapot módosító valami rutint. Tehát oda kell tenni a legördülő listát.imre
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.