Làm sao để textbox chuyển sang dạng số?

Liên hệ QC

HoangHacVT

Thành viên chính thức
Tham gia
3/6/09
Bài viết
82
Được thích
41
Nghề nghiệp
Marketing và bất cứ thứ gì người đẹp nhờ
Chào AE nhà GPE,

Mình nhập chuỗi số trong textbox như thế này 123456789, làm sao cho nó tự động chuyển thành 123.456.789 ngay trong khi nhập?

Mong các cao thủ chỉ giáo giúp,

Cám ơn rất nhiều,

Hạc
 
Chào AE nhà GPE,

Mình nhập chuỗi số trong textbox như thế này 123456789, làm sao cho nó tự động chuyển thành 123.456.789 ngay trong khi nhập?

Mong các cao thủ chỉ giáo giúp,

Cám ơn rất nhiều,

Hạc

Trước khi bạn gõ text trên bạn đánh dấu vùng bạn nhập liệu & nhấn tổ hợp phím Ctrl+Shift+1
 
Upvote 0
Trời, chẳng lẽ mỗi lần nhập liệu lại nhấn tổ hợp phím đấy bạn ơi? C1 cách nào khác không?

Theo mình yêu cầu của bạn làm trong excel được nhưng sẽ ảnh hưởng tới tốc độ file excel vì là thay đổi trong khi nhập
Mình nghĩ sẽ kết hợp giữa sự kiện change & format textbox "#.###.###"
Nhưng vụ này còn mệt nha vì nó còn liên quan đến dấu phân cách trong control panel

Nói chung rất mệt mỏi với textbox (vì bản chất nó là text + box) khi bạn làm việc với định dạng là số
 
Upvote 0
Đây là 2 cách tuỳ anh chọn

Mã:
Private Sub TextBox1_Change()
Me.TextBox1 = Format(Format(Me.TextBox1, "0"), "#,##0")
End Sub
'-----------------------------------------------------------------------
Private Sub TextBox2_Change()
Dim ch As String
ch = Replace(Me.TextBox2, ".", "")
ch = Format(ch, "#,##0")
Me.TextBox2 = Replace(ch, ",", ".")
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Không được Sealand ơi.

Làm vậy nó chỉ hiểu tới tối đa 100 thôi ( coi ví dụ kèm theo nha).

Giúp mình nữa nha.

Cám ơn,

Hạc
 

File đính kèm

Upvote 0
Phải viết thế này mới được chớ:


Mã:
Private Sub TextBox1_Change()
Me.TextBox1 = Format(Format(Me.TextBox1, "0"), "#,##0")
Me.TextBox2.Value = Val(Format(Me.TextBox1.Value, "0")) * 10 / 100
Me.TextBox3.Value = Val(Format(Me.TextBox1.Value, "0")) + Val(Format(Me.TextBox2.Value, "0"))
End Sub
Tiện thể giúp bạn luôn Form 1. Viết code như sau khi nhập năm sẽ hiện thứ tự lớn nhất tương ứng, nếu nhập năm không có sẽ bị xoá

Mã:
Private Sub TextBox1_AfterUpdate()
Dim nam, th
For Each cl In Sheet1.Range("A3:A" & Sheet1.[a65536].End(xlUp).Row)
If cl = Me.TextBox1 Then
nam = Me.TextBox1
If cl.Offset(, 1) > th Then th = cl.Offset(, 1)
End If
Next
Me.TextBox1 = nam
Me.TextBox2 = th
End Sub

Trên Form của bạn chỉ có 2 Control thì chỉ 1 khả dụng, vậy Focus chưa rời ô thì sao Private Sub TextBox1_AfterUpdate cos tác dung.
 
Lần chỉnh sửa cuối:
Upvote 0
Vẫn không được sealand ơi.

Viết như vậy để mỗi khi tẽtbox 1 thay đổi, textbox2 sẽ đổi theo và luôn bằng 10% của text1.

Thế nhưng dù nhập bao nhiêu số (1000 hay 1000000000000) ở text1 đi nữa thì text2 chỉ chạy từ 0-10 là hết.

kaka, mình dốt mấy vụ này, nên.... sealand chỉ tiếp nhé.
 
Upvote 0
Bạn nên thay 10/100 bằng 0.1
Không hiểu bạn chép ra sao chứ mình nhập vào File bạn xem nhé.
 

File đính kèm

Upvote 0
Hết xẩy, được rồi. Hehehe cám ơn nhiều nhé!
 
Upvote 0
Phải viết thế này mới được chớ:


Mã:
Private Sub TextBox1_Change()
Me.TextBox1 = Format(Format(Me.TextBox1, "0"), "#,##0")
Me.TextBox2.Value = Val(Format(Me.TextBox1.Value, "0")) * 10 / 100
Me.TextBox3.Value = Val(Format(Me.TextBox1.Value, "0")) + Val(Format(Me.TextBox2.Value, "0"))
End Sub

Cho mình hỏi thêm là muốn nhập dạng 123,456.00 thì làm sao? Mình đã thử đổi thành Format(Format(Me.textbox1, "0"),"#,##0.00") vẫn không được?

Cảm ơn nhe,
Hạc
 
Upvote 0
Nếu đã có số thập phân là mệt rồi đấy. Ta không dùng sự kiện change được nữa. Code sử lý phải viết lại. Giờ cuối giờ rồi. Hẹn sau nhé
Trước mắt bạn xoá đoạn code kia đi và chép đoạn này vào đã
Mã:
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Me.TextBox1 = Format(Format(Me.TextBox1, "0.00"), "#,##0.00")
Me.TextBox2.Value = Val(Format(Me.TextBox1.Value, "0.00")) * 0.1
Me.TextBox3.Value = Format(Val(Format(Me.TextBox1.Value, "0.00")) + Val(Format(Me.TextBox2.Value, "0.00")), "#,##0.00")
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu đã có số thập phân là mệt rồi đấy. Ta không dùng sự kiện change được nữa. Code sử lý phải viết lại. Giờ cuối giờ rồi. Hẹn sau nhé
Trước mắt bạn xoá đoạn code kia đi và chép đoạn này vào đã
QUOTE]
cám ơn bác!
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn nên thay 10/100 bằng 0.1
Không hiểu bạn chép ra sao chứ mình nhập vào File bạn xem nhé.

Bác sealand ơi!
Bây giờ nó lại thòi ra một rắc rối khác: số âm. mình muốn trong điều kiện nhất định thì khi nhập 12345.36 vào textbox, nó sẽ hiển thị -12,345.36 thay vì 12,345.36 . Mình đã thử nhiều cách như: (VD nhập ở textbox1)

Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Select Case Left(Me.Label4.Caption, 1)
Case "P"
Me.TextBox1 = Format(Format(Me.TextBox15, "(0.00)"), "#,##0.00") ' Hiển thị -12,345.36: tạm đạt yêu cầu
...
Khác
Me.TextBox1 = Format(Format(Me.TextBox15, "(0.00)"), "#,##0.00") ' Hiển thị (12,345.36): tạm đạt yêu cầu

Thế nhưng khi dùng text3 để cộng text1 (-12,345.36) và text2 (-1) với nhau thì hiển thị kết quả như sau: -12346.36 tức là nó không thể hiện dấu ngăn cách ở tẽt3 nữa dù text3 cũng format y như text1 "me.text1= Format(Format(Me.TextBox1, "(0.00)"), "#,##0.00")

Bác tư vấn tiếp với
Cám ơn bác!
 
Lần chỉnh sửa cuối:
Upvote 0
Minh sử dụng hàm này kết hợp với sự kiện key Press của text box cho kết quả tốt.
Trong hàm này này mình có bổ sung điều kiện If ... để kiểm tra cách định nghĩa dấu phân cách phần thập phân trong hệ thống. Hệ quả là bạn chỉ có thể gõ dấu phân cách phần thập phân đúng như đã định nghĩa trong phần Control Panel -> "Regional and Langugue..."

PHP:
Public Function KyTuSoOnly(TBtext, keyAsc, TBSelStart)
'Ham nay cua Visual Basic Library Ver 2.5.2
'Su dung ket hop voi su kien key press
'Chi cho phep nhap ky tu so vao textbox
Dim Tmp As String
Tmp = TBtext
If CDbl("0,5") = 5 Then '
    Select Case Chr$(keyAsc)
    Case "0" To "9", Chr$(8)
    Case "-"
      If InStr(1, Tmp, "-") = 0 Then
        If TBSelStart > 0 Then
          keyAsc = 0
        End If
      Else
        keyAsc = 0
      End If
    Case "."
      If InStr(1, Tmp, ".") > 0 Then
        keyAsc = 0
      End If
    Case Else
      keyAsc = 0
    End Select
Else
    Select Case Chr$(keyAsc)
    Case "0" To "9", Chr$(8)
    Case "-"
      If InStr(1, Tmp, "-") = 0 Then
        If TBSelStart > 0 Then
          keyAsc = 0
        End If
      Else
        keyAsc = 0
      End If
    Case ","
      If InStr(1, Tmp, ",") > 0 Then
        keyAsc = 0
      End If
    Case Else
      keyAsc = 0
    End Select
End If
KyTuSoOnly = keyAsc
End Function
 
Upvote 0
Minh sử dụng hàm này kết hợp với sự kiện key Press của text box cho kết quả tốt.
Trong hàm này này mình có bổ sung điều kiện If ... để kiểm tra cách định nghĩa dấu phân cách phần thập phân trong hệ thống. Hệ quả là bạn chỉ có thể gõ dấu phân cách phần thập phân đúng như đã định nghĩa trong phần Control Panel -> "Regional and Langugue..."

Như vậy code này mình sẽ viết trong module ư? và trong phần viết code sẽ viết như sau:

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Me.TextBox1.Value = kytusoonly(Me.TextBox1.Value)
End Sub

Mình hiểu vậy đúng không?

Không được rồi tungson ơi, Thử rồi và lỗi rồi.

Mình là dân gà mờ ở đây, mình copy để xài trước và hiểu sau là chính, mà cái code của tungson mình không hiểu gì hết nên xài không được. Bạn chỉ dẫn chi tiết hơn được không?

Cám ơn nhé!
 
Lần chỉnh sửa cuối:
Upvote 0
Mình gủi bạn file ví dụ
Trong sự kiện key press, khi goi ham Kytusoonly, ban phải khai báo tham số chứ
Sub Textbox_KeyPress(ASCII,...)
keyascii = kytusoonly(textbox.text, Ascii, Textbox.Selstart)
End sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom