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.

[VBA Excel] Obliczenia w języku VBA

Laik2013 09 Lip 2013 11:17 1956 6
  • #1 09 Lip 2013 11:17
    Laik2013
    Poziom 11  

    Cześć,

    Kod: vb
    Zaloguj się, aby zobaczyć kod
    Stworzyłem formę do przeliczania rocznego wynagrodzenia.
    Chciałbym, aby po kliknięciu przycisku, poszczególne składniki rocznego wynagrodzenia były automatycznie przeliczane.
    Po wciśnięciu przycisku przelicz Excel wprowadza mi wartość rocznego wynagrodzenia (bez rocznego bonusa) w odpowiednie pole, ale nie zaokrągla do pełnej sumy.
    Niestety nie wiem jak to zapisać w VBA, aby poprawnie przeliczało:(
    Kolejny problem jaki mam to nie wiem w jaki sposób zaprogramować odpowiednie zaokrąglanie tak jak mam w tabelce, aby odpowiednie wartości były automatycznie przeliczane i wprowadzane w odpowiednie pola w formie.

    Czy ktoś może mi pomóc przy tym zadaniu?
    W załączonym pliku umieściłem tabelkę do przeliczania wynagrodzenia. Kolumny zaznaczone na zielono zawierają wartości które chciałbym aby były tak samo przeliczane w formie.

    Wielkie dzięki za pomoc!
    Pozdrawiam,

  • Pomocny post
    #2 09 Lip 2013 13:13
    kindlar
    Poziom 36  

    Sformatowałeś "miesięczne wynagrodzenie" tak aby wynik był pokazywany z dokładnością do 0 miejsc po przecinku więc powstaje różnica. Potem dalsze obliczenia idą z błędem. Tworząc formuły bazuj zawsze na komórkach z oryginalnymi wartościami to na końcu nie będzie błędu.

  • #3 09 Lip 2013 14:19
    Laik2013
    Poziom 11  

    Dzięki,

    Udało mi się te obliczenia uzyskać w następujący sposób

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Działa,

    Pozdrawiam,

    Laik 2013

  • #4 09 Lip 2013 15:54
    PRL
    Poziom 33  

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    To tylko takie moje zapiski do porównania z Twoim kodem.

    Deklarując zmienne należy zawsze po nazwie zmiennej określać jej typ:
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Powyżej dwa razy wykonujesz obliczenia 'Int(Round(a / b * 100, 2) / 12)'.
    Żeby przyśpieszyć działanie makra użyłem:
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    P.S. Zamiast 'usfGehalt.txtjf.Value' wystarczy 'usfGehalt.txtjf'.
    Zauważyłem, że mnóstwo osób stosuje .value, które jest zbędne, gdyż odnosimy się do wartości. Domyślnie 'x = Cells(1, 1)' zwraca właśnie .value bez jawnego odwoływania się.

  • #5 09 Lip 2013 20:49
    Laik2013
    Poziom 11  

    Dzięki,

    Spróbowałem jeszcze w ten sposób i jest super.

    Liczy tak jak chciałem.

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Pozdrawiam,

    Laik2013

  • #6 09 Lip 2013 21:04
    cbrman
    Poziom 26  

    PRL napisał:
    P.S. Zamiast 'usfGehalt.txtjf.Value' wystarczy 'usfGehalt.txtjf'.
    Zauważyłem, że mnóstwo osób stosuje .value, które jest zbędne, gdyż odnosimy się do wartości. Domyślnie 'x = Cells(1, 1)' zwraca właśnie .value bez jawnego odwoływania się.


    Raczej pozostałbym przy pobieraniu wartości przez .value.
    O ile w tym przypadku nie robi to różnicy, to w niektórych wypadkach może nieźle nabroić, do poczytania poniżej:
    http://www.excelforum.pl/topics3/import-wartosci-z-innego-pliku-vt9248.htm

  • #7 10 Lip 2013 03:14
    PRL
    Poziom 33  

    Przeczytałem.

    Cytat:
    For Each v In Sheets(1).Range("K1:K20").Value

    to do zmiennej v będą przypisywane wartości komórek z danego obszaru i tym samym odwołanie v.Value zwróci błąd.

    Ale:
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Ma poprawną konstrukcję i w zmiennej x będziemy mieć wartość zmiennej v.
    Moja uwaga dotyczyła tego, że autor niepotrzebnie w każdej linii używał .value...

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