Wątek przeniesiony 2021-09-16 10:12 z Inne języki programowania przez cerrato.

Lokalizacja błędu w makrze VBA Excel

0

Witam, zacznę od tego że jestem całkowitym laikiem jeżeli chodzi o programowanie.
Staram się ułatwić sobie życie ojcu i napisać prosty kalkulator wypłat (tzn musi kliknąć i zatwierdzić).

Zatem stworzyłem prosty userform gdzie za pomocą Refedit zaznaczam komórkę z danymi wejściowymi, podaje liczbę w textbox przez którą dane z komórki wejściowej mają zostać przemnożone oraz za pomocą Refedit komórkę wyjściową czyli gdzie ma wkleić wynik, dodatkowo staram się zrobić aby całość było pomnożone jeszcze przez Vat i wstawione w komórce obok wyjściowej.

Private Sub oblicz_Click()

Dim Vat As Double
Vat = 1.23

'obliczam wypłatę z pobranych danych
Wyplata = Range(RefDane.Value) * KwotaDniowki

'wstawiam obliczoną wypłatę w zaznaczoną komórkę
Range(RefWyplata.Value) = Format(Wyplata.Value, "#,##0.00") & " zł"

'jeżeli ta komórka ma kolejną wolną komórkę nad sobą wstawiam napis że jest to kwota netto
If IsEmpty(Range(RefWyplata.Value).Offset(-1, 0)) Then
        Range(RefWyplata.Value).Offset(-1, 0) = "Kwota Netto"
End If

'obok wstawionej wypłaty netto wstawiam wypłatę brutto
Range(RefWyplata.Value).Offset(0, 1) = Format(Wyplata.Value * Vat, "#,##0.00") & " zł"

'jeżeli nad komórką z wypłatą brutto jest wolna komórka piszę że jest to kwota brutto
If IsEmpty(Range(RefWyplata.Value).Offset(-1, 1)) Then
        Range(RefWyplata.Value).Offset(-1, 1) = "Kwota Brutto"
End If

Clear_Form
End Sub

Błąd wyświetla mi w związku z tą linią:

Range(RefWyplata.Value).Offset(0, 1) = Format(Wyplata.Value * Vat, "#,##0.00") & " zł"

Błąd: Run-time Error '13':
Type mismatch

Bez tej jednej linii całość działa.

0
Range(RefWyplata.Value).Offset(0, 1) = Format(Wyplata.Value * Vat, "#,##0.00") & " zł"

Wyplata.Value to String, a Vat to Double. Nie da się pomnożyć Stringa, bo to nie jest liczba, tylko znaki. Żeby mnożyć, musisz to zrzutować na Double

CDbl(Wyplata.Value) * Vat

Powyższe policzy Double'a, a funkcja Format przyjmuje Stringa, więc żeby działało, musisz ponownie zrzutować na Stringa:

Range(RefWyplata.Value).Offset(0, 1) = Format(CStr(CDbl(Wyplata.Value) * Vat), "#,##0.00") & " zł" 
0

Nauka dla mnie taka że trzeba dokonywać konwersji typów, jednak wprowadzony kod niestety nadal nie działa.

0

Napisz jaki teraz masz błąd, co konkretnie nie działa, to może coś zaradzimy. Bez konkretów nie podziałamy.

0

Przepraszam za lakoniczną odpowiedź

Private Sub oblicz_Click()

Dim Vat As Double
Vat = 1.23

'obliczam wypłatę z pobranych danych
Wyplata = Range(RefDane.Value) * KwotaDniowki

'wstawiam obliczoną wypłatę w zaznaczoną komórkę
Range(RefWyplata.Value) = Format(Wyplata.Value, "#,##0.00") & " zł"

'jeżeli ta komórka ma kolejną wolną komórkę nad sobą wstawiam napis że jest to kwota netto
If IsEmpty(Range(RefWyplata.Value).Offset(-1, 0)) Then
        Range(RefWyplata.Value).Offset(-1, 0) = "Kwota Netto"
End If

'obok wstawionej wypłaty netto wstawiam wypłatę brutto
Range(RefWyplata.Value).Offset(0, 1) = Format(CStr(CDbl(Wyplata.Value) * Vat), "#,##0.00") & " zł"

'jeżeli nad komórką z wypłatą brutto jest wolna komórka piszę że jest to kwota brutto
If IsEmpty(Range(RefWyplata.Value).Offset(-1, 1)) Then
        Range(RefWyplata.Value).Offset(-1, 1) = "Kwota Brutto"
End If

Clear_Form

End Sub

Zamieniłem linijkę według zaleceń błąd jest ten sam:
Błąd: Run-time Error '13':
Type mismatch

Na żółto zaznacza tą samą linijkę:
Range(RefWyplata.Value).Offset(0, 1) = Format(CStr(CDbl(Wyplata.Value) * Vat), "#,##0.00") & " zł"

0

To już musisz sprawdzić, co podajesz w Wyplata.Value. Zobacz sobie jak działa ten kod, zwróć uwagę, w którym miejscu się wywala:

Dim Vat As Double
Vat = 1.23

Debug.Print Format(CStr(CDbl("10") * Vat), "#,##0.00") & " zł"
Debug.Print Format(CStr(CDbl("10,0") * Vat), "#,##0.00") & " zł"
Debug.Print Format(CStr(CDbl("10.0") * Vat), "#,##0.00") & " zł"

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