Telefonszámunk: 1-472-0679

[Resolved] Private Sub Worksheet_Activate makró futtatása egy másik munkalapról

Kezdőlap Fórumok Excel programozás [Resolved] Private Sub Worksheet_Activate makró futtatása egy másik munkalapról

Topic Resolution: Resolved
8 bejegyzés megtekintése - 1-8 / 8
  • Szerző
    Bejegyzés
  • #8707
    briteron
    Felhasználó

      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!

      #8708
      horvimi
      Adminisztrátor

        Szia!

        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

        #8709
        briteron
        Felhasználó

          Kedves 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!

          #8714
          horvimi
          Adminisztrátor

            Ebben 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

            #8715
            briteron
            Felhasználó

              Kedves 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,
              Dani

              #8716
              horvimi
              Adminisztrátor

                Esemé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 figyelmedbe

                https://videotanfolyam.pentaschool.hu/courses/excel-automatizalas-makrok-alapjai

                Imre

                • A hozzászólás módosításra került: 2 years, 8 months telt el-horvimi.
                #8718
                briteron
                Felhasználó

                  Köszönöm szépen megint, de valamiért nem fogadja el ezeket a sorokat, azt írja, hogy „Subscript out of range”.

                  #8719
                  horvimi
                  Adminisztrátor

                    Bocsá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

                  8 bejegyzés megtekintése - 1-8 / 8
                  • Be kell jelentkezni a hozzászóláshoz.