[VBA] Zaprogramować program zwracający kwotę.

0

Mam z tym problem. Kompletnie nie znam się na VBA. A pomoc jest po angielsku. Znam angielski, ale nie aż tak dużym poziomie by zrozumieć co piszą. Oto treść zadania, które muszę zrobić.

  1. Zaokrąglić argument będący liczbą z przedziału <-108,108> do dwóch miejsc po przecinku i zinterpretować go jako kwotę wyrażoną w PLN z uwzględnieniem groszy.
  2. Zwrócić BŁĄD, gdy argument nie jest liczbą rzeczywistą z zakresem <-108,108>, a w pozostałych przypadkach zwrócić tekst wyrażający kwotę wymienioną w 1 punkcie słownie z uwzględnieniem gramatyki języka polskiego.
    Przyjmujemy odpowiednią do kwoty złoty i grosz.

Co to wiem co mam użyć w zadaniu to: użyć Single lub Double by uwzględnić liczbę rzeczywistą, użyć For nazwa = liczba1 to liczba2 by mieć przedział <-108,108>, użyć If... then... else by zwrócić błąd, użyć MsgBox by wyświetlić treść.

Znalazłam kod na wyrażenie kwoty w PLN, ale nie wiem jak zrobić by dowolna liczba wyrażałaby kwotę. Czy ma być pusty nawias?
ActiveCell.FormulaR1C1 = "15000"
Selection.NumberFormat = "#,##0.00 $"

Zrobiłam przykładowy program, który podałam w temacie. Proszę więc byście wyjaśnili co źle zrobiłam.

Function Kwota_słownie(Liczba As Double) As Double

For Liczba = -10 8 To 10 8
ActiveCell.FormulaR1C1 = " "
Selection.NumberFormat = "#,##0.00 $"
If Liczba = Doulbe Then
MsgBox ("Argument jest liczbą rzeczywistą")
Else
MsgBox ("Argument nie jest liczbą rzeczywistą")
Slownie(-10 8 To 10 8)

End Function

0

Co zrobiłaś źle... No cóż - będę okrutny. Wszystko jest źle. Od początku do końca. Nie masz bladego pojęcia o programowaniu w VBA.
Nawet nie sprawdziłaś czy ten kod się wykonuje (a nie ma prawa się wykonać). A błędy (tylko główne):

  1. For bez Next. W ogóle po co ta pętla?
  2. If bez Endif. Tu musisz sprawdzić zakres.
  3. Liczba = Doulbe. Zakładając, że chodziło ci o Double, to i tak nadal jest źle. Sprawdzając, czy jest danego typu nie robisz = , tylko Is, lub sprawdzasz typ za pomocą TypeName.
  4. Jakie Selection? Jaki ActiveCell? Wszystko musisz robić na liczbie w tej funkcji.
  5. A gdzie zwracasz wynik?
  6. Ciekawy parametr do funkcji Slownie... Na pewno zły.

pozdrawiaMM

0

Kod się nie wykonuje. To wiem. For jak pisałam miał być do przedziału liczb <-108,108>. Nie wiem jak się sprawdza zakres. Nie wiem jak zrobić by była rzeczywista dlatego miał być double =. Niby jak mam wyrazić kwotę w zł, żeby zadziałało? Myślałam, że jest zwrócony wynik. Nie mam pojęcia, bo 1 raz w życiu coś takiego mam. Nie wiem jak mam to poprawić by było dobrze.

0

Tak na szybko:

Public Function Kwota_Slownie(byval liczba as double) as String
If Liczba<-10^8 Or Liczba>10^8 then 
   Kwota_Slownie="Błąd. Liczba spoza zakresu danych"
Else
   Liczba=Round(Liczba, 2)
   Kwota_Slownie=Slownie(Liczba)
End If

End Function

1 użytkowników online, w tym zalogowanych: 0, gości: 1