Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Excel VBA - sprawdzanie poprawności

01 May 2013 20:22 3315 6
  • Level 8  
    Hej,
    nigdy nie miałam styczności z VBA, potrzebuję jednak napisać makro.
    Chodzi mi o makro, które będzie sprawdzało 5 komórek z Arkusza1 i Ma ono sprawdzić tylko i wyłącznie czy którakolwiek z nich jest mniejsza od 0, a jeśli chcoiaż jedna <0 wyświetlić komunikat (msgBox), że tak nie może być.
    Makro ma się też uruchamiać od razu, gdy zmienia się wartość w komórce na ujemną (zmiana wartości zależna od wartości wpisanych do innych komórek)

    Napisałam taki kod:
    Code: vb
    Log in, to see the code


    Czy ktoś mógłby mi powiedzieć gdzie jest błąd? I co powinnam dopisać aby makro uruchamiało się automatycznie?
    Proszę o pomoc.
  • Moderator of Programming
    Nie sprawdzisz w ten sposób komórek w zakresie. Trzeba je albo wymnożyć przez siebie (jeśli jedna z nich jest ujemna, wynik będzie liczbą ujemną), ale co z zerem?
    Można sprawdzać kolejno w pętli.

    Prościej i właściwiej byłoby jednak wykorzystać procedurę zdarzeniową arkusza, sprawdzając wartość na bieżąco. Wklej w kod arkusza, nie do modułu
    Code: vb
    Log in, to see the code
    i przetestuj.
  • Level 8  
    Dziękuję za odpowiedź. Jednak chyba niezbyt precyzyjnie napisałam o co mi chodzi:

    Makro ma sprawdzać każdą komórkę niezależnie, tzn. najpierw sprawdzić czy C13 jest mniejsze od 0 i jeśli jest to pokazać komunikat o błędzie. Jak równa się 0 to wszystko jest w porządku
    potem to samo zrobić z komórką D13, E13, F13, G13

    Jeśli chociaż jedna z nich będzie zawierała wartośc mniejszą od 0 to wyświetlić komunikat o błędzie.


    c13 = c11+c10
    d13 = d11+d10 (tzn. zależna jest od wartości wpisanych do tych komórek i na podstawie przeliczenia C11+c10, d11+d10 może pojawić się ujemna wartość.


    W takim razie rozumiem, że Range jest niepoprawne? tj lepiej definiować każdą komórkę osobno?

    jeśli tak to jak je zdefiniować ? przez Dim? czy jakoś inaczej?
  • Helpful post
    Moderator of Programming
    Jeśli w zakresie są formuły, to zmienia postać rzeczy. Spróbuj wykorzystać inne zdarzenie.
    Code: vb
    Log in, to see the code
    Warto może ograniczyć Target.Range, bo zmiana będzie dotyczyła wszystkich komórek arkusza, co może być denerwujące... Np
    Code: vb
    Log in, to see the code
  • Level 8  
    Bardzo dziękuję! :)

    Jeszcze mam ostatnie pytanie: czy jest możliwość aby makro sprawdzało te komórki w arkuszu 1 ale komunikat wyświetlało w arkuszu 2? (albo tym, który będzie w danej chwili aktywny). Bo z kolei to C11 i C10 zależą od wartości w innym arkuszu.
  • Moderator of Programming
    Komunikat nie zależy od arkusza. Przed wywołaniem MsgBox należałoby aktywować właściwy. Ale nie znam zależności, więc trudno podpowiedzieć coś konkretnego.

    Właściwość Target.Formula zwróci to co wpisane do komórki w postaci String, więc może dałoby się "wydłubać" nazwę, rozdzielając string wykrzyknikiem. Możesz wrzucić jakiś przykład (plik jako załącznik)?
  • Level 8  
    Zdefiniowałam jeszcze jedną zmienną zakres i go ustawiłam i już mam w tym drugim arkuszu :)