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.

[VBA Excel] Obliczenia w języku VBA

Laik2013 09 Jul 2013 11:17 2607 6
  • #1
    Laik2013
    Level 11  
    Cześć,

    Code: vb
    Log in, to see the code
    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,
  • Helpful post
    #2
    kindlar
    Level 40  
    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
    Laik2013
    Level 11  
    Dzięki,

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

    Code: vb
    Log in, to see the code


    Działa,

    Pozdrawiam,

    Laik 2013
  • #4
    PRL
    Level 40  
    Code: vb
    Log in, to see the code


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

    Deklarując zmienne należy zawsze po nazwie zmiennej określać jej typ:
    Code: vb
    Log in, to see the code


    Code: vb
    Log in, to see the code


    Powyżej dwa razy wykonujesz obliczenia 'Int(Round(a / b * 100, 2) / 12)'.
    Żeby przyśpieszyć działanie makra użyłem:
    Code: vb
    Log in, to see the code


    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
    Laik2013
    Level 11  
    Dzięki,

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

    Liczy tak jak chciałem.

    Code: vb
    Log in, to see the code


    Pozdrawiam,

    Laik2013
  • #6
    cbrman
    Level 27  
    PRL wrote:
    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
    PRL
    Level 40  
    Przeczytałem.

    Quote:
    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:
    Code: vb
    Log in, to see the code

    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...