Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Dodawanie w textbox
nie mam pojecia




Typ: neutral
Postów: 15
Zarejestrowany: May 2005
Dodawanie w textbox

Czy istnieje możliwość by:
W textbox - ach umieszczonych w userform (AtiveX)
można było np:

żeby w textbox5 pojawiała się suma liczb (chodzi o dodawanie) wpisanych w textbox -ach od 6 do 10 ?


_____________________________________________
Mariusz

13-05-2005 11:06
Pokaż profil nie mam pojecia  Wyślij email do nie mam pojecia   
Jarek Grzybowski




Typ: neutral
Postów: 11
Zarejestrowany: Apr 2005
Najprościej wyglądało by to tak:

Najprościej wyglądało by to tak:
Dla każdego textboxa stanowiącego składnik sumy (textbox_6, ..., textbox_10) należy napisać procedurkę dla zdarzenia Change:

Sub textbox_X_Change
    with Me.textbox_5
        .Value = .Value + Me.textbox_X.Value
    end with
End Sub

Zanim zsumujesz wartości w każdej z tych procedur, trzeba sprawdzić czy wpisana w textbox_X wartość jest liczbowa (znajdziesz taki przykład w Tipsach VB4all). Ponad to warto zapewnić przy uruchomieniu formularza, aby w textbox_5 (gdzie jest wynik sumy) była watość "0", a nie bez znaków (pusty). Jest ryzyko, że użytkownik zamiast w textboxach skladników sumy (textbox_6, ..., textbox_10) wpisze wartość do textbox_5 z wynikiem! Wówczas textbox_5 nie będzie miał wartości sumy pozostałych 6, ...,10. Lepiej zamiast textbox_5 zastosować labelę, np.:

Sub textbox_X_Change
    with Me.label_5
        .Caption = .Caption + Me.textbox_X.Value
    end with
End Sub


_____________________________________________
Pozdrawiam
Jarek

13-05-2005 17:08
Pokaż profil Jarek Grzybowski  Wyślij email do Jarek Grzybowski   
nie mam pojecia




Typ: neutral
Postów: 15
Zarejestrowany: May 2005

Dzieki
Wszystko działa z małym wyjątkiem.
Zamias dodawać robi mi łańcuchy np jak w dwóch textbox wpiszemy 15 i 15 to w labelu wychodzi tak 115115

Kod textbox mam taki:

Private Sub textbox5_Change()
    With Me.Label17
        .Caption = .Caption + Me.TextBox5.Value
    End With
End Sub

Private Sub textbox6_Change()
    With Me.Label17
        .Caption = .Caption + Me.TextBox6.Value
    End With
End Sub

Private Sub textbox7_Change()
    With Me.Label17
        .Caption = .Caption + Me.TextBox7.Value
    End With
End Sub

Procedura wywoławcza:
If Me.CheckBox1.Value = True Then .Cells(NextRow, 4) = Label17.Caption Else .Cells(NextRow, 4) = TextBox4.Value


_____________________________________________
Mariusz

18-05-2005 09:07
Pokaż profil nie mam pojecia  Wyślij email do nie mam pojecia   
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

Mariuszu
W kontrolkach TextBox są stringi, należy:

- sprawdzić czy w ogóle coś jest wpisane do TexBox (LEN, TRIM)
- za pomocą IsNumeric sprawdzić czy wpisana wartość jest liczbą
- skorzystać z przekształcenia stringu na cyfrę
- i dopiero wykonać operację dodawania

na przykład tak:

Private Sub Dodaj()
' przy czym liczba powinna być wpisywana z przecinkiem
If Len(Trim(txtArg1.Value)) = 0 Then
    MsgBox "Nie wpisano argumentu 1"
    txtArg1.SetFocus
    Exit Sub
End If
If Len(Trim(txtArg2.Value)) = 0 Then
    MsgBox "Nie wpisano argumentu 2"
    txtArg2.SetFocus
    Exit Sub
End If
If Not IsNumeric(txtArg1.Value) Then
    MsgBox "Argumet 1 nie jest cyfrą"
    txtArg1.SetFocus
    Exit Sub
End If
If Not IsNumeric(txtArg2.Value) Then
    MsgBox "Argumet 2 nie jest cyfrą"
    txtArg2.SetFocus
    Exit Sub
End If
lblWynik = CDbl(txtArg1.Value) + CDbl(txtArg2.Value)

End Sub


Procedurę Dodaj można wywołać np w zdarzeniach Change kontrolek argumentów, czy też tam gdzie potrzebujesz.

Przy czym tak naprawdę zamiast IsNumeric dobrze byłoby po prostu zadbać w zdarzeniu KeyPress kontrolek TextBox aby były wprowadzane tylko cyfry, znak dziesiętny , wtedy mogłoby to wygladać tak na przykład:


Sub dodaj()
' przy czym liczba powinna być wpisywana z przecinkiem
If Len(Trim(txtArg1.Value)) = 0 Then
    MsgBox "Nie wpisano argumentu 1"
    txtArg1.SetFocus
    Exit Sub
End If
If Len(Trim(txtArg2.Value)) = 0 Then
    MsgBox "Nie wpisano argumentu 2"
    txtArg2.SetFocus
    Exit Sub
End If
lblWynik = CDbl(txtArg1.Value) + CDbl(txtArg2.Value)
End Sub


Sub TylkoCyfry(oTxt As MSForms.TextBox, ByRef KeyAscii As MSForms.ReturnInteger)
With oTxt
    If InStr(1, .Text, "," ) > 0 And KeyAscii = Asc("," ) Then ' checking that no 2 commas
        KeyAscii = 0
        Exit Sub
    End If
    Select Case KeyAscii
    Case Asc("0" ) To Asc("9" ), Asc("," )
    Case Else
        KeyAscii = 0
    End Select
End With
End Sub


Private Sub txtArg1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Call TylkoCyfry(txtArg1, KeyAscii)
End Sub

Private Sub txtArg2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Call TylkoCyfry(txtArg2, KeyAscii)
End Sub

Nie wiem czy się gdzieś nie pomyliłam...
(można oczywiście pomysleć o klasie, lecz nie wiem czego oczekujesz i jak dużo naprawdę masz tych kontrolek TextBox)

[Post edytowany dnia 18-05-2005 10:33 przez karolinavb]


_____________________________________________
Karolina

18-05-2005 09:48
Pokaż profil karolinavb  Wyślij email do karolinavb   
Wszystkich odpowiedzi: 3 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1