Cum se face Refreash unui UserForm ?
Cum se face Refreash unui UserForm ?
Buna ziua tuturor.Am doua formulare UserForm1 si UserForm2.Am de completat in UserForm1 datele facturii pentru un anumit client pe care al selectez dintr-un ComboBox.Daca nu se afla clientul in acel CoboBox apas un buton care imi deschide un alt formular UserForm2 in care pot introduce datele noului client.OK toate bune pana aici.Problema este ca dupa ce completez datele noului client si inchid UserForm2 revenind la UserForm1 care defapt era in spatele la UserForm2, cand caut in acel ComboBox nu imi apare ultima inregistrare facuta cu putin timp inainte.Daca inchid si UserForm1 si al redeschid imi apare si ultima inregistrare facuta.Mi-ar trebui un refesh de Userform.
Ma puteti ajuta?
Cum se face asta?
Toate cele bune
Pe curand..
Ma puteti ajuta?
Cum se face asta?
Toate cele bune
Pe curand..
Re: Cum se face Refreash unui UserForm ?
Cum populezi randurile din combobox?
Re: Cum se face Refreash unui UserForm ?
Randurile din ComboBox le populez dintr-o foaie din excel.
Re: Cum se face Refreash unui UserForm ?
Ok, dintr-o foaie, dar folosesti AddItem, sau RowSource? E mai simplu cu RowSource si folosirea unui nume in sheet-ul respectiv, name care e asociat unui range dinamic. In situatia asta, procedura de "refresh" a randurilor inseamna doar
unde "nume" e numele definit pentru range-ul respectiv.
In orice situatie va trebui sa repopulezi combobox-ul daca in al doilea form adaugi ceva la range-ul pe care-l folosesti pentru a popula combobox-ul.
Dupa parerea mea, la inchiderea celui de-al doilea form trebuie sa salvezi intr-o variabila globala cum sa terminat "sesiunea de lucru" cu al doilea form: cu adaugare de inregistrare, sau nu (intr-o variabila de tip boolean). In evenimentul DropButtonClick si in evenimentul Enter al ComboBox-ului testezi variabila respectiva si reiei procedura de populare a randurilor, daca e cazul.
Cod: Selectaţi tot
ComboBox.RowSource = "=nume"
In orice situatie va trebui sa repopulezi combobox-ul daca in al doilea form adaugi ceva la range-ul pe care-l folosesti pentru a popula combobox-ul.
Dupa parerea mea, la inchiderea celui de-al doilea form trebuie sa salvezi intr-o variabila globala cum sa terminat "sesiunea de lucru" cu al doilea form: cu adaugare de inregistrare, sau nu (intr-o variabila de tip boolean). In evenimentul DropButtonClick si in evenimentul Enter al ComboBox-ului testezi variabila respectiva si reiei procedura de populare a randurilor, daca e cazul.
Re: Cum se face Refreash unui UserForm ?
Multumesc frumos de ajutor,dar am gasit totusi o solutie poate mai simpla.Adica am facut un buton "Actualizare" care daca al apesi reincarca ComboBox-ul.
Multumesc frumos pentru sfaturi.
Pe curand.
Toate cele bune va doresc.
Multumesc frumos pentru sfaturi.
Pe curand.
Toate cele bune va doresc.
Re: Cum se face Refreash unui UserForm ?
Mai simpla findca ai un buton in plus (in al carui click ce se intampla?) Ok, daca zici tu... dar eu as pune si un Label cu un text in care sa explic la ce foloseste butonul ala, ca poate uita user-ul sa apese pe "Actualizare".
Dupa parerea mea, cand poti sa controlezi fluxul de executie al programului in totalitate cu ce controale ai, nu ai niciun motiv sa adaugi controale suplimentare.
Dupa parerea mea, cand poti sa controlezi fluxul de executie al programului in totalitate cu ce controale ai, nu ai niciun motiv sa adaugi controale suplimentare.
Re: Cum se face Refreash unui UserForm ?
Sunt deacord cu tine, dar nu stiu cum se face.Ma poti ajuta cu un exemplu?
Multumesc anticipat.
Toate cele bune.
Multumesc anticipat.
Toate cele bune.
Re: Cum se face Refreash unui UserForm ?
In fisierul atasat (eu am lucrat in 2007, dar am salvat si ca xls), rulezi singurul macrou care exista. Macroul afiseaza un form care are un combobox si un buton - butonul e pentru afisarea celui de-al doilea form. Al doilea form are doua butoane: Adaugat si Anulat - click pe Adaugat inseamna ca s-au adaugat inregistrari in range-ul care populeaza combobox-ul din form 1 - click pe Anulat sau inchis fereastra de la Close button inseamna ca nu s-au adaugat inregistrari in range (procedura de adaugare efectiva de inregistrari in range nu exista in exempu, dar o sa explic cum poti sa testezi si asta). Oricare dintre cele doua butoane ascunde form2 iar la revenirea in form1, daca dai un click pe combobox vei primi mesajul adecvat ("Inregistrari adaugate", sau "Nu s-au adaugat inregistrari") actiunii din form2. In codurile atasate controalelor si in modulul vba o sa vezi ca exista o singura variabila de tip boolean care tine evidenta actiunii din form2 si care in evenimentul DropButtonClick e testata si in functie de valoarea ei se face actualizarea datelor din combobox.
Acum in evenimentul DropButtonClick al combobox-ului sterge (sau transforma in comentariu) tot in afara de linia:
Fa userform1 modeless (de la properties ShowModal False in loc de True). Poti sa nu mai lansezi macroul "exemplu", ci direct userform1 cu run. Dupa ce a aparut fereastra, da un click in Sheet1 si adauga/sterge pe/de pe coloana A. Revino in userform si vezi ce se intampla in combobox.
Cu Ctrl+F3 poti sa vezi definitia numelui "litere" folosit la popularea randurilor din combobox.
Acum in evenimentul DropButtonClick al combobox-ului sterge (sau transforma in comentariu) tot in afara de linia:
Cod: Selectaţi tot
ComboBox1.RowSource = "=litere"
Cu Ctrl+F3 poti sa vezi definitia numelui "litere" folosit la popularea randurilor din combobox.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Re: Cum se face Refreash unui UserForm ?
Multumesc de ajutorul dat,functioneaza perfect. Off cam coplicata treaba asta cu programarea.
Toate cele bune.
Toate cele bune.
Re: Cum se face Refreash unui UserForm ?
Dupa ce intelegi ce e cu evenimentele, in ce ordine apar, cum e cu vizibilitatea variabilelor si procedurilor, nu mai pare atat de complicat. Partea de codificare devine in timp chiar o munca de rutina - mai dificil, dar si mai interesant e sa controlezi si sa vii intodeauna in intampinarea nevoilor celor care utilizeaza programul. Orice control suplimentar va aduce dupa sine cod de verificare a starii controlului respectiv in relatie cu celelalte controale si posibilele "combinatii" ce pot aparea in utilizarea programului, de aceea cu cat sunt mai putine controale, cu atat codul va fi mai usor de scris, de controlat, de depanat si de modificat, la nevoie.