Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA Excel - prawidłowa struktura programu

Andie 05 Sty 2017 12:34 264 7
  • #1 05 Sty 2017 12:34
    Andie
    Poziom 20  

    Witam,

    napisałem sobie program, w którym jest kilka UserForm’ów. Kilka procedur jest wywoływanych przez różne kontrolki form. Wszystko działa bez zarzutu, tylko chciałbym się dowiedzieć, jak powinna wyglądać poprawna struktura takiego programu. U mnie to wygląda tak, że procedury znajdują się w modułach odpowiednich form (przez kontrolki których są wywoływane), a większość zmiennych, ponieważ jest wykorzystywana w różnych miejscach, zadeklarowałem jako zmienne globalne (w module procedury standardowej). Czytałem, że nie jest dobrze, jeśli używa się zmiennych globalnych, ale nie bardzo wiem, jak to inaczej skonstruować. Co innego, jeśli procedury są wywoływane kolejno w module standardowym – wtedy argumenty (zmienne) przekazywane są pomiędzy procedurami. A czy można to w jakiś sposób zrobić z procedurami w modułach UserForm?
    Będę wdzięczny za wszelkie wskazówki oraz namiary na ewentualną lekturę, która pomogłaby mi zgłębić wiedzę w tym temacie.

    Pozdrawiam,
    Andie

  • #2 05 Sty 2017 13:35
    JRV
    Specjalista - VBA, Excel

    Można użyć niektórych właściwości formantów(kontrolek), np. Tag

  • #3 06 Sty 2017 12:17
    Andie
    Poziom 20  

    JRV napisał:
    Można użyć niektórych właściwości formantów(kontrolek), np. Tag


    JRV, a mógłbyś napisać coś więcej na ten temat, ew. podesłać jakiś przykład?

  • #4 06 Sty 2017 12:56
    JRV
    Specjalista - VBA, Excel

    Łatwiej będzie Umieść swój przykład Userform z kontrolami, komentarz gdzie i jak należy przekazać dane. Zależy, Unload lub Hide formy. I Twója drogę rozwiązywania.

  • #5 06 Sty 2017 18:37
    Andie
    Poziom 20  

    Taki przykład. Na jednej formie mam ListBoxa, który w zdarzeniu initialize pobiera dane z tablicy1 (wcześniej załadowane od tablicy z arkusza) . Procedura w zdarzeniu Change (TextBox) filtruje dane w arkuszu (poprzez porównywanie ciągów w TextBox i arkuszu) i tworzy nową tablicę2 z pasującymi rekordami, która trafia do tego listBoxa (w miejsce tablicy1). Po wyczyszczeniu zawartości TexTboxa, ponownie do listBoxa trafia tablica1. W takim przypadku nie wiem jak zrobić, by sięgnąć w zdarzeniu Change do tablicy1 (bez zadeklarowania jej jako zmiennej globalnej).

    Inny przykład. Na UserForm1 jest umieszczony CheckBox, którego włączenie zmienia status, który z kolei jest wykorzystywany w instrukcjach warunkowych w procedurze wywoływanej w UserForm2 (uruchamiany z poziomu UserForm1). W tym przypadku status również zadeklarowałem jako zmienną globalną. Teraz jednak tknęło mnie, że jeżeli nie zamknę UserForm1 tylko go ukryję, mogę po prostu bezpośrednio z procedury (UF2) sprawdzić, jaki jest stan CheckBoxa. Czy to będzie poprawne rozwiązanie?

  • #6 06 Sty 2017 18:58
    JRV
    Specjalista - VBA, Excel

    Opis jest dobry, ale lepiej plik załącznika.
    Jeśli Ukryj, nie zamknąć UserForm, jest tylko nieco więcej pamięci. Nadzieję, że Twój komputer nie jest najstarszym, jak mój pierwszy komputer miał 32 kilobajtów pamięci RAM.

    Andie napisał:
    Czy to będzie poprawne rozwiązanie?

    Kontrowersyjne kwestie. W każdego swoj styl programowania. W początkowej fazie mogą być nie optymalny, doświadczenie przychodzi z czasem.

  • #7 06 Sty 2017 20:06
    Andie
    Poziom 20  

    Jest problem z zamieszczeniem pliku, ponieważ zawiera dane osobowe.

  • #8 06 Sty 2017 20:29
    JRV
    Specjalista - VBA, Excel

    Nie powinno być prawdziwy plik, tylko przykład, mało kto chce utworzyć plik na Twój opis.

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME