Wpis z mikrobloga

Program sprawdza czy liczba wpisana do ComboBox (Userform) mieści się w przedziale.
Wartość "dochód" to dochód wpisany w to pole.

To działa:
If dochód > 500 And dochód <= 1000 Then
(…)
End If

A to nie działa:
Dim k1, k2 As Integer
k1 = 500
k2 = 1000
If dochód > k1 And dochód <= k2 Then
(…)
End If

Dlaczemu?! ( ͡° ʖ̯ ͡°)

#programowanie #vba
  • 7
@krecikBMC: nic z tego, drukuję wyniki po każdym kroku.

Dopiero wprowadzenie
k3 = dochód.Value
i podmianie przy if "dochód" na k3 daje radę, ale nie mam pojęcia dlaczego, w końcu to ciągle to samo, CInt() też w niczym nie pomaga.

A wprowadzałeś w ComboBox czy dałeś luźną zmienną "dochód"?
@krecikBMC: To VBA jest jakieś porąbane, tyle obejść ile muszę tam wprowadzać przekracza ludzkie pojęcie. Jak widzisz, konstrukcja

formant ComboBox < 100 // nie działa
zmienna = formant ComboBox < 100 // działa

ComboBox ma zabezpieczenia typu IsNumeric, zmieniam też niepotrzebnie ten integer na integer dla pewności i nie chwyta, nie ogarniam...
@krecikBMC: udało się. Dzięki za zainteresowanie.

~~
Dla potomności - zająłem się niepotrzebnie zmienną k1 (która jest zasysana z arkusza), a nie ComboBox. Z tego co kojarzę zwraca on wartość String (a może i Variant...), zmyliło mnie to, że komendy IsNumeric nie krzyczą o błędzie, tj. przyjąłem, że program widzi, że to liczba.

Wystarczy dodać CInt(dochód) [lub CInt(dochód.value)] i wtedy zmienne się zgodzą, i program dokona obliczeń.
@krecikBMC: tak jest.

O tyle to ciekawe, że nie przeszkadza to komendzie IsNumeric (czy liczba), ani przy obliczeniach bezpośrednich (jak wpisywałem <500, a nie 500 Then ...

i po zamianie

If IsNumeric(dochód.Value) and CInt(dochód.Value) > k1 Then ..._

to się wykrzaczało gdy to liczba nie była (Type mismatch), bo tekst cannot into liczba, pociąłem więc na 2 kroki (jeżeli liczba, to jeżeli > k1). Przy 1. wpisie zwyczajnie wtedy ignorowało, no