vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest wtorek, 14 maja 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

combobox - tekst na liczbe


otwartyotwarty rozpoczął: du_gy postów: 10



napisał: admin
postów: 613


umieszczony:
22 września 2010
12:37

  
To jest dziwne, bo na polskim Windowsie działa jak podałeś, na systemie niemieckim działa tak jak ja podałem.

Jeśli chodzi o niejawna konwersje, to chodzi tu w ogóle o to, ze ComboBox1.Value zwraca wartość typu Variant/String.
Jeśli z tak uzyskanymi danymi chcesz przeprowadzać jakieś operacje matematyczne zostaną one niejawnie przekonwertowane na typ numeryczny.
Patrz tutaj:
http://pl.wikipedia.org/wiki/Konwersja_typu

Cytat:
to dziwne ponieważ u mnie taki kod
Sub test()
z = "3,1415"
a = "3.1415"
If Not IsNumeric(z) Then z = Val(z)
If Not IsNumeric(a) Then a = Val(a)
MsgBox z & " " & CDbl(z) & vbCrLf & a & " " & CDbl(a)
End Sub



daje poprawne wyniki, czyli 3,1415 w obu przypadkach. Dowód w załączniku.

Nie rozumiem dlaczego uważasz, że świadome wywołanie ComboBox1.Value jest jakąś niejawną metodę. W ten sposób myśląc CDbl(z) też jest niejawna konwersją.

Napisz mi proszę dlaczego moje wyniki są poprawne a twoje nie?
napisał: Harry
postów: 42


umieszczony:
22 września 2010
09:33

  
nazwa pliku rozmiar
pi.jpg 4.49 kB

to dziwne ponieważ u mnie taki kod
Sub test()
z = "3,1415"
a = "3.1415"
If Not IsNumeric(z) Then z = Val(z)
If Not IsNumeric(a) Then a = Val(a)
MsgBox z & " " & CDbl(z) & vbCrLf & a & " " & CDbl(a)
End Sub



daje poprawne wyniki, czyli 3,1415 w obu przypadkach. Dowód w załączniku.

Nie rozumiem dlaczego uważasz, że świadome wywołanie ComboBox1.Value jest jakąś niejawną metodę. W ten sposób myśląc CDbl(z) też jest niejawna konwersją.

Napisz mi proszę dlaczego moje wyniki są poprawne a twoje nie?
napisał: admin
postów: 613


umieszczony:
22 września 2010
08:46

  
Właśnie zamieszczony przez Ciebie przykład nie daje prawidłowych wyników:
Jeśli w ComboBox1 wpiszesz 1,1 to ma MsgBoksie wyświetla się wartość 1,1 i 1,1.
Ale jeśli wprowadzisz 1.1 to jak wynik uzyskasz 1.1 i 11.

Przypomnę Ci tylko, ze w pierwszym przypadku dokonujesz niejawnej konwersji.
napisał: Harry
postów: 42


umieszczony:
22 września 2010
07:49

edytowany:
22 września 2010
07:55

  
Zakładając, tak jak zrobił to autor, że wszystkie wartości w ComboBox są liczbami nie widzę celu w pisaniu procedury, która będzie zabezpieczać się na wypadek gdy ktoś do combobox wprowadzi np. opis swojego samopoczucia ale zgadzam się, że gdyby tak miało być należy to tez oprogramować.

Dlaczego według ciebie, nieprofesjonalne jest w wykorzystywaniu rozwiązań i funkcji, które są dostępne i działają poprawnie.
Gdy do twojego przykładu wstawimy mój if.. :

Cytat:
z=Combobox1.Value

If IsNumeric(ComboBox1.Text) Then z = ComboBox1.Value Else z = Val(ComboBox1.Text)


Cytat:
MsgBox z & " " & CDbl(z)


to przy głównym założeniu wszystko działa poprawnie.
napisał: admin
postów: 613


umieszczony:
21 września 2010
17:55

edytowany:
22 września 2010
07:49

  
Witam,

To wszystko nie jest takie proste, jak by się mogło wydawać.
1. Metoda .Value zwraca typ danych String, a nie wartość numeryczną. Opierasz się Harry na niejawnej konwersji danych ze String na wartość numeryczna. Jest to podejście nieprofesjonalne.

Sprawdź poniższy przykład:
- jeśli wartość Combobox1.Value jest równa 11.3 (z kropka),
- jeśli wartość Combobox1.Value jest równa 11,3 (z przecinkiem).

z=Combobox1.Value
MsgBox z & " " & CDbl(z) & " " & Val(z)



Funkcja Val zamienia poprawnie na postać liczbowa ciągi znaków (String) tylko wówczas, gdy znakiem dziesiętnym jest kropka.
Funkcja CDbl zamienia poprawnie na postać liczbowa ciągi znaków (String) tylko wówczas, gdy znakiem dziesiętnym jest znak dziesiętny ustawiony w Panelu sterowania Windows.
Płynie z tego taki wniosek, ze funkcji Val w tym przypadku nie należy używać.
Do konwersji lepiej użyć funkcji CDbl.
Funkcji IsNumeric należy użyć do sprawdzania poprawności wprowadzonych danych.
W zależności od ustawień systemu program przyjmie dana z kropką lub przecinkiem jako znakiem dziesiętnym.
Jeśli natomiast chcesz się uniezależnić od rodzaju znaku dziesiętnego (chociaż nie wiem po co) należy napisać następującą procedurę:

1. Sprawdzamy, czy dana jest wartością numeryczna.,
2. Jeśli tak - idziemy dalej,
3. Jeśli nie - zamieniamy wszystkie kropki w danej na przecinki,
4. Sprawdzamy, czy dana jest wartoscia numeryczna,
5. Jeśli tak - idziemy dalej,
6. Jeśli nie - zamieniamy wszystkie przecinki w danej na kropki,
7. Sprawdzamy, czy dana jest wartością numeryczna,
8. Jeśli tak - idziemy dalej,
8. Jeśli nie - DANA NIE MA POSTACI LICZBOWEJ.

Cytat:
ja bym zastosował coś takiego
If IsNumeric(ComboBox1.Value) Then z = ComboBox1.Value Else z = Val(ComboBox1.Value)



przykład w załączniku
napisał: Harry
postów: 42


umieszczony:
21 września 2010
07:52

  
nazwa pliku rozmiar
Zeszyt1.xls 52.00 kB

ja bym zastosował coś takiego
If IsNumeric(ComboBox1.Value) Then z = ComboBox1.Value Else z = Val(ComboBox1.Value)



przykład w załączniku
napisał: jackiller
postów: 3


umieszczony:
18 września 2010
12:40

  
Jeśli

a=combobox1.value -> i w tym przypadku a - jest stringiem
to w kolejnymm kroku po prostu stosujesz funkcję np
a= Cint(a)
Cbyte, Csng... etc

Wiem że post z 2005 roku ale problem jest problemem
napisał: r_c
postów: 38


umieszczony:
19 września 2005
22:10

  
W edytorze VBA liczby np. 125,12 deklarujemy 125.12 (zamiast przecinka używamy kropkę). Przecinek możemy uzyskać tylko dla
zmiennych typu String np. "125,12". I prawdopodobnie tu jest problem.Zamień przecinki na kropki.
r_c
napisał: du_gy
postów: 22


umieszczony:
19 września 2005
21:01

  
chcialem zrobic tak: skonwertowac string (z comboboxa) do np doule uzywajac CDbl:

Dim nazwa1 As String
Dim wartosc1 As String
Dim wartosc2 As Double
nazwa1 = CBoxNazwa.Value
wartosc1 = CBoxwartosc.Value
wartosc2 = CDbl(wartosc1)



wszystko idze dobrze, ale jak wartosc1 jest 2,5 lub cokolwiek z przecinkiem to wywala mi blad 13 /niezgodnosc typow/
..o co chodzi?
napisał: du_gy
postów: 22


umieszczony:
19 września 2005
20:12

  
czesc
mam tak : w combobox sa do wyboru rozne liczby..jednak nie da sie ich przypisac do zadnej zmiennej typu integer, single..itd....jedyne co moge to przypisac ta wartosc do zmiennej typu string; co dla mnie oznacza ze nie moge wykonac na niej zadnej operacji matematycznej
ktos mi pomoze i wytlumaczy jak rozwiazac ten problem (chce zeby do zmiennej typu integer przypisac wybrana z combobox wartosc)
dzieki


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z