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.