Tạo phạm vi nhập liệu cho Textbox trong VBA

13/06/21
1730
0

Hôm nay, tinvanphong xin gửi tới bạn 1 thủ thuật VBA. Tạo phạm vi nhập liệu cho Textbox trong VBA , gọi là một điều khiển TextBox nâng cao hỗ trợ cú pháp khai báo, để chấp nhận hoặc từ chối đầu vào của người dùng. Sử dụng thuộc tính Mask, bạn có thể chỉ định đầu vào sau, mà không cần viết bất kỳ logic xác thực tùy chỉnh nào trong ứng dụng của mình.

Tạo phạm vi nhập liệu cho Textbox trong VBA

Tạo phạm vi nhập liệu cho Textbox trong VBA
Tạo phạm vi nhập liệu cho Textbox trong VBA

1 – CÔNG DỤNG

  • Xử lý đặc biệt cho các ký tự đầu vào, ví dụ như để chuyển đổi các ký tự chữ cái thành chữ hoa.
  • Chặn các nút không cho phép nhập vào Textbox, ví dụ ở đây là nhập ngày tháng, thì chỉ được nhập các số và không cho nhập các chuỗi ký tự khác
  • Giúp người dùng thao tác nhanh về phần nhập liệu chính xác.

2 – HƯỚNG DẪN

Bước 1 : bạn tạo 1 ClassModel có tên là MaskedTextBox , bạn có thể thấy ở hình phía dưới.

Tạo phạm vi nhập liệu cho Textbox trong VBA
Tạo phạm vi nhập liệu cho Textbox trong VBA

Bước 2: Copy toàn bộ code này vào Classmodel vừa tạo.

Tùy chọn rõ ràng

Public WithEvents mTextBox As MSForms.TextBox

Private mMask As String
Private mMaskPlaceholder As String
Private mMaskSeparator As String

Public Enum AllowedKeysEnum
NumberKeys = 1 ‘2 ^ 0
CharacterKeys = 2′ 2 ^ 1
‘để có thêm tùy chọn, các giá trị tiếp theo cần phải là 2 ^ 2, 2 ^ 3, 2 ^ 4,…
End Enum
Private mAllowedKeys As AllowedKeysEnum

Public Sub SetMask(ByVal Mask As String, ByVal MaskPlaceholder As String, ByVal MaskSeparator As String, Optional ByVal AllowedKeys As AllowedKeysEnum = NumberKeys)
mMask = Mask
mMaskPlaceholder = MaskPlaceholder
mMaskSeparator = MaskSeparator
mAllowedKeys = AllowedKeys

mTextBox.Text = mMask
FixSelection
End Sub

‘ move selection so separators get not replaced
Private Sub FixSelection()
With mTextBox
Dim Sel As Long
Sel = InStr(1, .Text, mMaskPlaceholder) – 1
If Sel >= 0 Then
.SelStart = Sel
.SelLength = 1
End If
End With
End Sub

Private Sub mTextBox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim tb As MSForms.TextBox
Set tb = Me.mTextBox

‘allow paste
If Shift = 2 And KeyCode = vbKeyV Then
On Error Resume Next
Dim DataObj As MSForms.DataObject
Set DataObj = New MSForms.DataObject

DataObj.GetFromClipboard
Dim PasteData As String
PasteData = DataObj.GetText(1)

On Error GoTo 0
If PasteData <> vbNullString Then
Dim LikeMask As String
LikeMask = Replace$(mMask, mMaskPlaceholder, “?”)

If PasteData Like LikeMask Then
mTextBox = PasteData
End If
End If
End If

Select Case KeyCode
Case vbKey0 To vbKey9, vbKeyNumpad0 To vbKeyNumpad9
‘allow number keys
If Not (mAllowedKeys And NumberKeys) = NumberKeys Then
KeyCode = 0
ElseIf Len(tb.Text) >= Len(mMask) And InStr(1, tb.Text, mMaskPlaceholder) = 0 Then
KeyCode = 0
End If

Case vbKeyA To vbKeyZ
‘allow character keys
If Not (mAllowedKeys And CharacterKeys) = CharacterKeys Then
KeyCode = 0
ElseIf Len(tb.Text) >= Len(mMask) And InStr(1, tb.Text, mMaskPlaceholder) = 0 Then
KeyCode = 0
End If

Case vbKeyBack
‘allow backspace key
KeyCode = 0
If tb.SelStart > 0 Then ‘only if not first character
If Mid$(tb.Text, tb.SelStart, 1) = mMaskSeparator Then
‘jump over separators
tb.SelStart = tb.SelStart – 1
End If

‘remove character left of selection and fill in mask
If tb.SelLength <= 1 Then
tb.Text = Left$(tb.Text, tb.SelStart – 1) & Mid$(mMask, tb.SelStart, 1) & Right$(tb.Text, Len(tb.Text) – tb.SelStart)
End If
End If

‘if whole value is selected replace with mask
If tb.SelLength = Len(mMask) Then tb.Text = mMask

Case vbKeyReturn, vbKeyTab, vbKeyEscape
‘allow these keys

Case Else
‘disallow any other key
KeyCode = 0
End Select

FixSelection
End Sub

Private Sub mTextBox_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
FixSelection
End Sub

Bước 3 :  Bạn cần có 1 tạo 1 USERFORM và 1 TEXTBOX có tên là NHAPLIEUDATA

Tạo phạm vi nhập liệu cho Textbox trong VBA
Tạo phạm vi nhập liệu cho Textbox trong VBA

Bước 4 : Bạn bấm View CODE USERFORM  Copy code này vào

Private MaskedTextBoxes As Collection
Private Sub UserForm_Initialize()
Set MaskedTextBoxes = New Collection
Dim MaskedTextBox As MaskedTextBox
‘init TextBox1 as date textbox
Set MaskedTextBox = New MaskedTextBox
Set MaskedTextBox.mTextBox = Me.NHAPLIEUDATE
MaskedTextBox.SetMask Mask:=”__/__/____”, MaskPlaceholder:=”_”, MaskSeparator:=”/”
MaskedTextBoxes.Add MaskedTextBox
End Sub

Tạo phạm vi nhập liệu cho Textbox trong VBA
Tạo phạm vi nhập liệu cho Textbox trong VBA

Bạn có thể chỉnh lại khai báo chỗ ME.NhAPLIEUDATE , khai báo tên textboxt đã được tạo, bạn có thể sưa lại chổ này __/__/____ theo tùy thích của bạn.

3 – Tải về

CLICK VÀO ĐÂY ĐỂ TẢI DEMO

Như vậy, mình đã giới thiệu đến các bạn các tạo phạm vi nhập liệu cho Textbox trong VBA. Hy vọng, bài viết này sẽ mang đến sự hữu ích cho các bạn trong việc học tập, cũng như công việc. Nếu các bạn có ý kiến, thắc mắc gì thì hãy để bình luận phía bên dưới nhé. Chúc các bạn thành công, cảm ơn các bạn đã ghé thăm Tinvanphong.com.

Tham khảo thêm các bài viết.

Phần mềm xuất nhập tồn bằng Excel miễn phí 2021

Chuyển đổi số thành chữ viết bằng Code VBA

5/5 - (1 bình chọn)

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *