Telefonszámunk: 1-472-0679

[Resolved] userform show modal probléma

Kezdőlap Fórumok Excel programozás [Resolved] userform show modal probléma

Topic Resolution: Resolved
6 bejegyzés megtekintése - 1-6 / 6
  • Szerző
    Bejegyzés
  • #9215
    karesz_k
    Felhasználó

      Sziasztok!

      Egy nagy adatbázisban keresgélnék egy jóval összetettebb programmal mint a példa, ahol több munkalapon keres adatokat és összepárosítja a találatokat. De néha megesik, hogy pl. elírásból nem talál egyezést. Eddig msgbox és stop paranccsal oldottam meg, de ilyenkor mindig manuálisan kellett tovább futtatnom a programot.
      Azt szeretném megoldani, hogy amikor nincs meg az egyezés nyisson egy userform-ot, a program álljon meg, ameddig én keresgetek a munkalapon,kijavítom a hibát. Majd amikor az userformot bezárom fusson tovább a program.
      Egy egyszerű pl:
      for sor=1 to 3
      range(„A” & sor)=sor
      if sor=2 then userform1.show false ‘itt nyissa meg az userform1-et, pl.beírok egy 5-öst B2-be, bezárom
      az userformot és fusson tovább a for a végéig
      next

      Ha a userform1.show -ot használom akkor megáll a program,de nem tudok a munkalapon dolgozni. Ha az userform1.show false verziót használom akkor pedig nem áll meg a program, és ugyanez van ha az userformnál beállítom a showmodal-t falsraés úgy használom a .show-t.
      Remélem érthetően leírtam…
      Ha van valakinek ötlete azt előre is köszönöm!

      #9216
      horvimi
      Adminisztrátor

        Szia!

        Olyasmire gondolsz ugye, mint a Ctrl-F kereső ablaka, ami mögött simán lehet bármit csinálni, majd visszatérni a kereséshez.

        Első felindulásomba azt akartam írni, hogy ilyesmit nem lehet egy programon belül csinálni. Arra gondoltam, hogy a kereső ciklus a hiba esetén elmenthetné az aktuális futási környezetet, és a következő indításnál lehetne opció, hogy onnan folytassa.

        Aztán mégis utánakerestem a dolognak, és a sok NEM LEHET között találtam két linket, ahol úgy néz ki, van megoldás.
        Nem próbáltam, de nézd meg!

        Ez az első
        https://www.mrexcel.com/board/threads/pause-macro-then-resume-macro.673602/
        Itt Gary’s Student nevű user megad egy linket

        Második
        https://answers.microsoft.com/en-us/msoffice/forum/all/vba-script-to-pause-macro-allow-editing-then/53027408-ed41-4300-b42e-ed2fc20b8e9c
        Itt meg Andreas Killer kommentjei lehetnek hasznosak.

        A kulcs a DoEvents parancs, ami egy gyorsan pörgő ciklus közben megcsináltatja az Excellel a közben történt eseményeket.
        Szóval kiteszi a form-ot nem modális módban, tovább megy, de belefut egy ciklusba, ami addig pörög, amíg a for látszódik.
        És közben megcsinálja azt, amit a user tesz.
        Én legalább is ezt képzelem.

        Jelezz vissza, hogy mi lett!

        Imre

        #9217
        karesz_k
        Felhasználó

          Szia Imre!

          Ha felém jársz a vendégem vagy… ez a kod működik! A példa programba az userform1.show helyett betettem a call Teszt parancsot. (Andreas Killer-től származó linkből a teljes Teszt kod.)

          Sub sorteszt() ‘példa program a bejegyzésből
          For sor = 1 To 3
          Range(„A” & sor) = sor
          If sor = 2 Then Call Test
          Next
          Range(„A5”) = „Kész”
          End Sub

          Sub Test() ‘ Andreas Killer megoldása a linkből

          Load UserForm1
          UserForm1.Label1 = „Make some changes, close me if finished”
          MsgBox „Start of the macro”

          On Error GoTo Continue
          UserForm1.Show vbModeless
          Do While Not UserForm1.Visible
          DoEvents
          Loop
          Do While UserForm1.Visible
          DoEvents
          Loop
          Continue:

          MsgBox „Rest of the macro”
          End Sub

          Tökéletes! Nagyon köszönöm Imre!!

          #9218
          karesz_k
          Felhasználó

            Szia!
            Egy kis plussz…
            Miután meghívtam a Teszt programot (call Teszt), nemcsak a munkalapon enged garázdálkodni, hanem az űrlapon elhelyezett commandbutton -hoz rendelt makrót is engedi lefutni. Szabad a gazda amíg az userform-ot be nem zárom.

            Ez így több mint tökéletes!
            Örök hála!!

            #9219
            horvimi
            Adminisztrátor

              Nagyon örülök!
              Ezzel én is tanultam valami újat.
              🙂
              Imre

              #9221
              karesz_k
              Felhasználó

                Idő közben egy másik megoldást is találtam, de az sufni tunig ehhez képest.
                userform-on label-ekbe kiiratni a hibás találat adatait és ugyanezen userform-on egy listbox-ba betölteni az adatbázist. A betöltött adatbázisból kikeresve a delikvenst kijelölni. Egy commandbuton és két textbox segítségével kijavíttatni a hibát az programmal listbox -ból kiszedett sor szám alapján. Ebben az esetben nem kell a munkafüzeten keresgetnem csak a listbox-ban .
                De a fenti megoldás sokkal komplexebb lehetőségeket biztosít.

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