Kezdőlap › Fórumok › Excel programozás › [Resolved] userform show modal probléma
- This topic has 5 hozzászólás, 2 résztvevő, and was last updated 2 years, 3 months telt el by karesz_k.
-
SzerzőBejegyzés
-
2022-08-07-12:05 #9215
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
nextHa 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!2022-08-07-14:29 #9216Szia!
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 linketMá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
2022-08-07-18:24 #9217Szia 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 SubSub 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 SubTökéletes! Nagyon köszönöm Imre!!
2022-08-07-18:37 #9218Szia!
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!!2022-08-07-18:47 #9219Nagyon örülök!
Ezzel én is tanultam valami újat.
🙂
Imre2022-08-07-18:51 #9221Idő 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. -
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.