Làm sao để hiển thị % trong TextBox? (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

thanhtam348

Thành viên thường trực
Tham gia
9/3/07
Bài viết
288
Được thích
62
Tôi có 1 List name danh sách bao gồm cột tên và cột con số %, nhưng sao tôi đưa vào TextBox thì không hiển thị đúng, VD như 7% thì nó cho ra là 0.07. AC hay bạn nào biết cách xin chỉ dùm.
 
Tôi có 1 List name danh sách bao gồm cột tên và cột con số %, nhưng sao tôi đưa vào TextBox thì không hiển thị đúng, VD như 7% thì nó cho ra là 0.07. AC hay bạn nào biết cách xin chỉ dùm.

Dùng hàm Format đi, ví dụ
TextBox1.Text = Format('gì gì đó', "#%")
 
Upvote 0
Chào các AC và bạn. Vì không muốn tạo chủ đề mới, nên vào lại đây nhờ giúp đở tiếp.
Xin kết hợp giúp dùm mình đoạn code như yêu cầu trong file VD đính kèm. Cám ơn.
 

File đính kèm

Upvote 0
Bạn thêm code này vào sheet
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, Range(Cells(4, 5), Cells(65536, 4).End(xlUp))) Is Nothing Then
    Application.EnableEvents = False
        Target = Target.Offset(, -1) & Target
    Application.EnableEvents = True
End If

End Sub
 
Upvote 0
Bạn thêm code này vào sheet
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, Range(Cells(4, 5), Cells(65536, 4).End(xlUp))) Is Nothing Then
    Application.EnableEvents = False
        Target = Target.Offset(, -1) & Target
    Application.EnableEvents = True
End If

End Sub

Cám ơn bạn. Nhưng mình chỉ muốn nó kết hợp ở cột ngày tháng thôi. Code của bạn thì cột ngày tháng cho ra như ý, còn cột "tên khách hàng" cũng bị thay đổi. Bạn dùm sửa cho. Cám ơn.
 
Upvote 0
Chào các AC và bạn. Vì không muốn tạo chủ đề mới, nên vào lại đây nhờ giúp đở tiếp.
Xin kết hợp giúp dùm mình đoạn code như yêu cầu trong file VD đính kèm. Cám ơn.
Sửa sự kiện ComboBox_Click thành vầy:
PHP:
Private Sub ComboBox1_Click()
  With Range("C65000").End(xlUp)
    .Offset(1, 0) = ComboBox1.Text
    .Offset(1, 1) = ComboBox1 & Format(Date, "dd/mm/yyyy")
    .Offset(1, 2) = ComboBox1.Column(1)
  End With
  ComboBox1.Text = ""
End Sub
 
Upvote 0
Cám ơn, tốt rồi dhn46, nhưng nó có thể rút gọn hơn nửa - hoặc kết hợp với công thức trên được không?
 
Upvote 0
Bài của anh NDU đã giải quyết vấn đề của bạn rồi, chọn text box và có kết hợp mã hàng với ngày tháng, bạn kiểm tra lại
 
Upvote 0
Chào AC và các bạn, xin trợ giúp dùm code cho TextBox nó đang bị lổi. Cám ơn nhiều.
 

File đính kèm

Upvote 0
Chào AC và các bạn, xin trợ giúp dùm code cho TextBox nó đang bị lổi. Cám ơn nhiều.
Code trong form như sau:

Mã:
Private Sub TextBox2_AfterUpdate()
Nhan
End Sub

Private Sub TextBox2_Change()
TextBox2 = Format(TextBox2.Value, "#,##0")
End Sub

Private Sub TextBox3_AfterUpdate()
Nhan
End Sub

Sub Nhan()
If IsNumeric(TextBox2) = False Or IsNumeric(TextBox3) = False Then
        TextBox4 = "#VALUE!"
        Exit Sub
    Else
        Me.TextBox4 = Format(Me.TextBox2 * 1 * Me.TextBox3 * 1, "#,##0")
End If

End Sub

Private Sub TextBox3_Change()
TextBox3 = Format(TextBox3.Value, "#,##0")
End Sub
 
Upvote 0
Code trong form như sau:

Mã:
Private Sub TextBox2_AfterUpdate()
Nhan
End Sub

Private Sub TextBox2_Change()
TextBox2 = Format(TextBox2.Value, "#,##0")
End Sub

Private Sub TextBox3_AfterUpdate()
Nhan
End Sub

Sub Nhan()
If IsNumeric(TextBox2) = False Or IsNumeric(TextBox3) = False Then
        TextBox4 = "#VALUE!"
        Exit Sub
    Else
        Me.TextBox4 = Format(Me.TextBox2 * 1 * Me.TextBox3 * 1, "#,##0")
End If

End Sub

Private Sub TextBox3_Change()
TextBox3 = Format(TextBox3.Value, "#,##0")
End Sub

Cám ơn domfootwear.
Đã được rồi, nhưng nếu dùng cho cả những TextBox hàng dưới thì có cách nào rút ngắn code lại không bạn ?
 
Upvote 0
Upvote 0
Chào Hoàng Trọng Nghĩa, cám ơn bạn nhiều. Cuối cùng rồi phần nầy tôi không còn cách nào hơn của bạn, còn phần nơi đây tôi cũng đành chịu code rờm rà hơn, dù sao - khi sử dụng cũng thấy tiện.
Thấy code rờm rà quá nên tôi có giảm ít chi tiết, không biết sau có gặp lổi gì không, AC và các bạn biết xin mách dùm.
Kế tiếp xin giúp đở tôi một việc mà tôi tưởng mình làm được (Yếu quá).
Mình muốn khi nhap tất cả các giá trị vào TextBox trong From và lấy tất cả số liệu từ From đưa vào Sheet theo khoanh vùng màu định sẳn của mình. Xin giúp đở dùm, cám ơn AC và các bạn.

Và cứ mổi lần nhập From thì nó trình tự xuống hàng dưới cùng tiếp theo
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Chào Hoàng Trọng Nghĩa, cám ơn bạn nhiều. Cuối cùng rồi phần nầy tôi không còn cách nào hơn của bạn, còn phần nơi đây tôi cũng đành chịu code rờm rà hơn, dù sao - khi sử dụng cũng thấy tiện.
...........

Với form tính toán nhiều TextBox như vậy, bạn không cần phải dùng nhiều sự kiện AfterUpdate như thế đâu, chỉ cần thêm 1 nút lệnh, sau khi nhập dữ liệu xong, chỉ cần 1 lần bấm tính toán.

Vẫn dùng 1 hàm để "khử" text:

PHP:
Function LoaiDau(ByVal numb As String) As Double
    On Error GoTo ExitFunction
    LoaiDau = Replace(numb, ",", "")
ExitFunction:
End Function

Sau đó là nút lệnh tính toán:

PHP:
Private Sub CommandButton1_Click()
    TextBox4 = Format(LoaiDau(TextBox2) * LoaiDau(TextBox3), "#,##0")
    TextBox8 = Format(LoaiDau(TextBox6) * LoaiDau(TextBox7), "#,##0")
    TextBox12 = Format(LoaiDau(TextBox10) * LoaiDau(TextBox11), "#,##0")
    TextBox16 = Format(LoaiDau(TextBox14) * LoaiDau(TextBox15), "#,##0")
    TextBox20 = Format(LoaiDau(TextBox18) * LoaiDau(TextBox19), "#,##0")
    TextBox24 = Format(LoaiDau(TextBox22) * LoaiDau(TextBox23), "#,##0")
    TextBox28 = Format(LoaiDau(TextBox26) * LoaiDau(TextBox27), "#,##0")
    TextBox32 = Format(LoaiDau(TextBox30) * LoaiDau(TextBox31), "#,##0")
    CommandButton2.Enabled = True
End Sub

Và cuối cùng là nút lệnh nhập dữ liệu:

Mã:
Private Sub CommandButton2_Click()
    Dim i As Long, j As Long, h As Long, Ctrl As Control
[COLOR=#008000][B]' Làm trên mảng rồi gán xuống sheet (cách này nhanh hơn):[/B][/COLOR]
    Dim Arr()
    ReDim Arr(1 To 8, 1 To 4)
    j = 0: h = 1
    For i = 1 To 32
        Arr(h, i - j) = Controls("TextBox" & i).Value
        Select Case i
            Case 4, 8, 12, 16, 20, 24, 28, 32
            j = j + 4
            h = h + 1
        End Select
    Next
    Sheet1.Range("J65536").End(xlUp).Offset(1).Resize(8, 4).Value = Arr
[COLOR=#008000][B]' Làm trực tiếp trên sheet:[/B][/COLOR]
[COLOR=#008000]'    With Sheet1.Range("J65536").End(xlUp).Offset(1)
'        j = 1
'        For i = 1 To 32
'            .Offset(h, i - j).Value = Controls("TextBox" & i).Value
'            Select Case i
'            Case 4, 8, 12, 16, 20, 24, 28, 32
'                j = j + 4
'                h = h + 1
'            End Select
'        Next
'    End With[/COLOR]

    For Each Ctrl In Controls
        If TypeName(Ctrl) = "TextBox" Then Ctrl.Text = ""
    Next
    CommandButton2.Enabled = False
End Sub

Bạn thử xem có đúng ý của bạn không nhé!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Xin AC và bạn giúp mình thêm là làm sao để loại bỏ những số 0 trong TextBox, nếu như những ô trước nó bị rổng. Vì nếu mình dùng hàm IF(TYPE(MATCH($C$4,OFFSET... như thế nầy trên Sheet và kết hợp với hàm INDEX thì với số 0 đó nó cho kết quả không như ý muốn. Xin cám ơn.
 

File đính kèm

Upvote 0
Xin AC và bạn giúp mình thêm là làm sao để loại bỏ những số 0 trong TextBox, nếu như những ô trước nó bị rổng. Vì nếu mình dùng hàm IF(TYPE(MATCH($C$4,OFFSET... như thế nầy trên Sheet và kết hợp với hàm INDEX thì với số 0 đó nó cho kết quả không như ý muốn. Xin cám ơn.
Sửa code cho CommandButton1 như vầy chắc được:
PHP:
Private Sub CommandButton1_Click()
  Dim i As Long, tmp1 As String, tmp2 As String, tmp As Double
  On Error Resume Next
  For i = 1 To 8
    tmp1 = Me.Controls("TextBox" & i * 4 - 2).Text
    tmp2 = Me.Controls("TextBox" & i * 4 - 1).Text
    tmp = LoaiDau(tmp1) * LoaiDau(tmp2)
    If tmp Then Me.Controls("Textbox" & i * 4) = Format(tmp, "#,##0")
  Next
  CommandButton2.Enabled = True
End Sub
 
Upvote 0
CÓ lệnh nào không cho nhập DL vào ComboBox mà chỉ lấy DS từ List có sẵn không Anh chị? Dúp đở dùm.
 
Upvote 0
Anh chị và các bạn thông cảm giúp tôi code của From nầy, tôi cố làm mà lại hiểu biết về nó ít quá. Mình muốn làm sao thu gọn code lại, nhập liệu nhanh nhẹ hơn, hiện tại trong file thực của mình nhập rất chậm, mà khi nhập xong bị mất những DS trên ListBox. cám ơn nhiều.
 

File đính kèm

Upvote 0
Trong Form mình có 2 ComboBox chứa mã hàng, mình tạo thêm một TextBox và muốn lấy mã hàng một trong hai ComboBox đó nếu nó được chọn và đưa vào TextBox - AC nào biết xin giúp dùm mình. Cảm ơn.
 
Upvote 0
Trong Form mình có 2 ComboBox chứa mã hàng, mình tạo thêm một TextBox và muốn lấy mã hàng một trong hai ComboBox đó nếu nó được chọn và đưa vào TextBox - AC nào biết xin giúp dùm mình. Cảm ơn.

Đơn giản thì chỉ cần sử dụng sự kiện Change của Combobox rồi dùng
PHP:
UserForm.TextBox.Value=UserForm.Combobox.Value
Nhưng mà bạn muốn làm gì đây? Nếu như cả hai combobox đều được chọn thì bạn giải quyết thế nào?
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn kyo, nhờ bạn cụ thể hơn cho mình được không? mình chả biết gán nó vào đâu cả.
Tất nhiên là trong 2 chỉ chọn một combobox, nói rỏ hơn là mình có 2 cột mã hàng khác nhau và muốn đưa nó vào form, sau đó nạp vào Sheet chung một cột. vậy thì nếu chỉ một cột mã mình dùng luôn trong ComboBox, bởi có 2 cột nên mới muốn lược nó vào TextBox, lấy trong TextBox nạp lại vào Sheet.
 
Lần chỉnh sửa cuối:
Upvote 0
Đầu tiên thì trở lại cái vấn đề mình giúp bạn hồi nãy, bạn chỉ cần bỏ vào sự kiện Change của combobox, mỗi lần combobox bạn thay đổi thì textbox cũng sẽ thay đổi.
PHP:
Private Sub ComboBox1_Change()
UserForm1.TextBox1.Value = UserForm1.ComboBox1.Value
End Sub
Cảm ơn kyo, nhờ bạn cụ thể hơn cho mình được không? mình chả biết gán nó vào đâu cả.
Tất nhiên là trong 2 chỉ chọn một combobox, nói rỏ hơn là mình có 2 cột mã hàng khác nhau và muốn đưa nó vào form, sau đó nạp vào Sheet chung một cột. vậy thì nếu chỉ một cột mã mình dùng luôn trong ComboBox, bởi có 2 cột nên mới muốn lược nó vào TextBox, lấy trong TextBox nạp lại vào Sheet.
Ý bạn là vì bạn có 2 cột và bạn không biết nối nó thành 1 cột thế nào nên bạn phải cho 2 cái combobox rồi cho textbox lấy giá trị combobox được chọn phải không?
 
Upvote 0
Cám ơn bạn! - Bạn nghỉ đúng rồi. nhưng 2 cột nầy là 2 cột danh sách hàng hóa trong Name Manager, Vậy có thể nối nó thành 1 cột được không ?

Muốn hỏi thêm bạn điều là: trong 2 combobox, nếu lở chọn một trong 2 thì có cách nào để xóa combobox đã lở chọn không?
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn bạn! - Bạn nghỉ đúng rồi. nhưng 2 cột nầy là 2 cột danh sách hàng hóa trong Name Manager, Vậy có thể nối nó thành 1 cột được không ?

Muốn hỏi thêm bạn điều là: trong 2 combobox, nếu lở chọn một trong 2 thì có cách nào để xóa combobox đã lở chọn không?
Hiện tại giờ kyo mới nghĩ được thế này thôi, mong mọi người có cách làm nhanh hơn thì giúp kyo với, hì hì.
Với abc, def là tên của 2 cột hàng hóa của bạn nhé. Bạn chèn cái này vào form
PHP:
Option Base 1
Private Sub UserForm_Initialize()
    Dim arr1, arr2
    Dim arr
    arr1 = Evaluate("abc")
    arr2 = Evaluate("def")
    ReDim arr(1 To UBound(arr1, 1) + UBound(arr2, 1))
    For i = LBound(arr1, 1) To UBound(arr1, 1)
        arr(i) = arr1(i, 1)
    Next i
    For i = LBound(arr2, 1) To UBound(arr2, 1)
        arr(UBound(arr1, 1) + i) = arr2(i, 1)
    Next i
    
    UserForm1.ComboBox1.List() = arr
End Sub

Còn vấn đề thứ hai bạn hỏi thì mình không được hiểu lắm. Bạn muốn xóa là xóa thế nào? Ý bạn là bạn chọn trong combobox rồi mà bạn muốn đổi cái khác à? Thì bạn chỉ việc chọn lại combobox thôi thì lập tức textbox cũng sẽ được đổi thôi mà.
 
Lần chỉnh sửa cuối:
Upvote 0
Hiện tại giờ kyo mới nghĩ được thế này thôi, mong mọi người có cách làm nhanh hơn thì giúp kyo với, hì hì.
Với abc, def là tên của 2 cột hàng hóa của bạn nhé. Bạn chèn cái này vào form
PHP:
Option Base 1
Private Sub UserForm_Initialize()
    Dim arr1, arr2
    Dim arr
    arr1 = Evaluate("abc")
    arr2 = Evaluate("def")
    ReDim arr(1 To UBound(arr1, 1) + UBound(arr2, 1))
    For i = LBound(arr1, 1) To UBound(arr1, 1)
        arr(i) = arr1(i, 1)
    Next i
    For i = LBound(arr2, 1) To UBound(arr2, 1)
        arr(UBound(arr1, 1) + i) = arr2(i, 1)
    Next i
    
    UserForm1.ComboBox1.List() = arr
End Sub

Còn vấn đề thứ hai bạn hỏi thì mình không được hiểu lắm. Bạn muốn xóa là xóa thế nào? Ý bạn là bạn chọn trong combobox rồi mà bạn muốn đổi cái khác à? Thì bạn chỉ việc chọn lại combobox thôi thì lập tức textbox cũng sẽ được đổi thôi mà.

Ý mình muốn hỏi là: nếu như mình kích chọn nhầm combobox1, vậy khi chọn lại combobox2 thì combobox1 vẩn còn hiển thị giá trị của nó, mình có thể xóa thủ công được, nhưng như vậy nó không "khoa học" lắm, còn để đại thì cũng không sao, nhưng mình nhìn mình biết chứ còn người khác nhìn thì...họ cũng chả biết gì.
 
Upvote 0
Ý mình muốn hỏi là: nếu như mình kích chọn nhầm combobox1, vậy khi chọn lại combobox2 thì combobox1 vẩn còn hiển thị giá trị của nó, mình có thể xóa thủ công được, nhưng như vậy nó không "khoa học" lắm, còn để đại thì cũng không sao, nhưng mình nhìn mình biết chứ còn người khác nhìn thì...họ cũng chả biết gì.

PHP:
Private Sub ComboBox1_Change()
If UserForm1.ComboBox1.Value = "" Then Exit Sub
UserForm1.ComboBox2.Value = ""
UserForm1.TextBox1.Value = UserForm1.ComboBox1.Value
End Sub

Private Sub ComboBox2_Change()
If UserForm1.ComboBox2.Value = "" Then Exit Sub
UserForm1.ComboBox1.Value = ""
UserForm1.TextBox1.Value = UserForm1.ComboBox2.Value
End Sub
Theo yêu cầu của bạn thì làm thế này, nhưng có thể làm gọn hơn nếu xài UserForm.Controls().
Mà bạn làm theo 1 combobox như mình nói ở trên cho tiện
 
Upvote 0

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

Back
Top Bottom