Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Excel VBa - jak sprawdzić podzielność?

jtta 02 Maj 2013 19:59 2628 4
  • #1 02 Maj 2013 19:59
    jtta
    Poziom 5  

    Hej,
    chciałam napisać makro, które sprawdzi czy wartość, którą ktoś wpisze do komórki A1 jest podzielna przez 59, a jeśli nie będzie to chciałabym aby pojawiło się okienko gdzie będzie można pisać tylko wartośc podzielną przez 59.

    Napisałam coś takiego:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    No i nie działa...
    Z tego co znalazłam to powinnam użyć Mod -jeśli to jest dobrze to gdzie tkwi błąd? VBA zaznacza mi na żółto Private Sub Worksheet_Calculate() ale nie jest napisane czemu to jest źle.

  • #2 02 Maj 2013 21:04
    adamas_nt
    Moderator Programowanie

    No, trochę zakręcone ;)
    1. Dla pojedynczej komórki nie stosuj pętli For. Wystarczy Range()
    2. Każda pętla (jeśli już) ma swój początek i koniec. Zjadłaś Next
    3. Do porównania potrzebny jest wynik działania: If liczba Mod liczba = 0 Then

    Dlaczego przy Worksheet_Calculate?
    Prościej byłoby przy Worksheet_Change gdzie warunkiem będzie Target.Address(0,0)="A1" z wyłączonymi Eventami (bez tego zapętli się w nieskończoność).

    Można zapętlić InputBox do naciśnięcia Cancel, lub osiągnięcia pożądanego wyniku...

  • #3 10 Maj 2013 08:38
    jtta
    Poziom 5  

    Dzięki za pomoc. Tamta pętla wynika z makra, które mi napisałeś w poprzednim wątku. Wtedy wszystko działało więc miałam nadzieję, że i tu zadziała po drobnej zmianie ;)

    Zgodnie z Twoimi sugestiamii napisałam coś takiego:


    Kod: vb
    Zaloguj się, aby zobaczyć kod


    pojawił się błąd "Syntax error" czy to oznacza, że może być tylko jedno PrivateSub w arkuszu? Czy w to (0,0) powinnam wpisać co innego? :)

    a gdy zrobiłam tak:
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    to pojawił się błąd: "sub or function not defined" Wydaje mi się, że wszytko jest zamknięte?

    czy jak definiuje zakres to muszę go wykorzystać? bo vba nie akceptował mi jak wpisywałam "if Liczba in zakres"

  • #4 10 Maj 2013 09:21
    adamas_nt
    Moderator Programowanie

    Widzę, że nie jest to kwestia pojedynczego błędu. Nie wiem z czego to wynika, ale kompletnie nie akceptujesz zasad języka. Nie można być tak upartym.

    W przypadku tej procedury do zmiennej Target przypisywany jest obiekt typu Range (zakres) ze wszystkimi własnościami. Range.Address jest identyczny z Selection arkusza w momencie uruchomienia procedury (zdarzenia). Czy teraz jasne?

    Kod: vb
    Zaloguj się, aby zobaczyć kod

  • #5 10 Maj 2013 10:00
    czeles
    Poziom 15  

    Zapis:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    jest oczywiście błędem (jest zresztą w edytorze VB wyświetlany czerwoną czcionką). Target jest zadeklarowana jako zmienna typu Range, i jest odwołaniem do aktualnie zmienianej komórki. W deklaracji zmiennej nie ma miejsca na przypisywanie jej wartości.
    Właściwie zapisana procedura wygląda tak:
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Przecież nie ma w Visual Basic słowa OK, a Not jest operatorem negacji a nie sprawdzeniem wartości.

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