Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Sprawdzanie wprowadzanych danych

26 Maj 2015 14:55 804 5
  • Poziom 9  
    Witam
    Szukałem długo w internecie w jaki sposób sprawdzać dane z UserForma z dwóch TextBoów (w moim przypadku TextBox i ComboBox) przed wprowadzeniem do arkusza Excela stanowiącego bazę danych.
    Chodzi o to, żeby w bazie danych nie dublować pozycji i jeżeli dane są w bazie, to żeby makro wyrzuciło komunikat, że te dane już są. Czyli wprowadzane dane z UserForma są porównywane z danymi w dwóch kolumnach arkusza excela.
    Nie poradziłem sobie wprost. Kombinując obszedłem to w ten sposób, że utworzyłem nowy arkusz „Rejestr_Dubel” stanowiący kopię arkusza bazy „Rejestr”. Makro o treści:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    zapisuje z UserForma dane najpierw do Arkusza „Rejestr_Dubel” na następnie porównuje dane w pierwszej i drugiej kolumnie tego arkusza z 1 i 2 kolumną arkusza „Rejestr”. Jeżeli wprowadzane pozycje z pierwszej i drugiej kolumny arkusza „Rejestr_Dubel” są identyczne jak w pierwszej i drugiej kolumnie arkusza „Rejestr” wówczas wyskakuje komunikat z informacją z MsgBoxa.
    Czy jest jakiś prostszy sposób na to, żeby wprowadzając dane do bazy można było bezpośrednio porównać te dane z UserForma z danymi arkusza „Rejestr”, do którego te dane są zapisywane, z pominięciem arkusza „Rejestr_Dubel”, a jeżeli jest to jak to zapisać?. Każdy człowiek, jak dziecko, uczy się od innych i dlatego liczę na pomoc. Pozdrawiam.
    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
  • Poziom 9  
    Jas_1 napisał:
    Czy jest jakiś prostszy sposób na to, żeby wprowadzając dane do bazy można było bezpośrednio porównać te dane z UserForma z danymi arkusza do którego te dane są zapisywane, a jeżeli jest to jak to zapisać?.


    Zawsze mogłem liczyć na pomoc od Pana adamas_net. I przyznam, że dużo mi pomógł w moich meandrach z VBA.
  • Poziom 22  
    Dzień dobry. Za każdym razem kiedy uzupełniany jest arkusz Rejestr podnoszony jest w nim Event pod który można podpiąć sprawdzanie czy wartość już w nim jest:
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    a w nim można dodać np. taką funkcję wbudowaną, żeby nie latać forem:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    --
    Edit:
    Ponieważ on wystawia tego eventa po wstawieniu wartości do arkusza, trzeba dodać jakiś zapis, żeby automatycznie go usuwał ;) (wyłączenie eventów na chwilę, żeby nie powstała nieskończona pętla). Czyli w przypadku wykrycia należałoby dodać:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    albo Exit Sub.
  • Poziom 9  
    Dziękuję bardzo za zainteresowanie. W podanym warunku If trzeba określić "treść szukanej frazy". Nie wiem czy dobrze to zrozumiałem, ale nie mogę z góry znać szukanej frazy. Chyba, że czegoś nie rozumiem.
    Chodzi o to, że to co wpisuję przez UserForma w dwóch polach (txt4, txt2) nie mogę z góry określić, gdyż te dane nie są stałą treścią.
    Makro ma porównywać wartości z ComboBoxa txt4 z danymi w kolumnie 1 arkusza "Rejestr" oraz wartości z TextBoxa txt2 z wartościami w kolumnie 2 arkusza "Rejestr". W przypadku ich zgodności wyrzuca wtedy komunikat z MsgBoxa. Pozdrawiam.
  • Pomocny post
    Poziom 22  
    Ok, to najlepiej w bloku cmdDodaj_Click() za wszystkimi ifami sprawdzającymi poprawność danych dać coś takiego. Myślałem, że te dane są przeliczane na arkuszu i dopiero sprawdzane względem poprawności. Takie coś załatwia sprawę:
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    A co do listboxa, bo widzę, że go Pan tam inicjalizuje tablicą, to chyba wygodniej byłoby skorzystać z opcji listbox1.rowsource i wskazać arkusz z nagłówkiem a listbox sam się elegancko powinien wypełnić za pomocą jednej linijki kodu :)
  • Poziom 9  
    Bardzo Panu dziękuję. O to właśnie chodziło. A ja kombinowałem jak ... No niestety, ale za mało siedzę w VBA. Jeszcze raz bardzo dziękuję. Pozdrawiam :)