Điều kiện nhập liệu cho textbox trong Userform.

Liên hệ QC

nhoklipice

Thành viên hoạt động
Tham gia
17/3/09
Bài viết
112
Được thích
3
Trên 1 form có 4 textbox 1 2 3 4 bắt buộc nhập.

Nếu textbox1 có dữ liệu ngày tháng + textbox2 trống thì popup "ban chua nhap textbox2" và setforcus tai textbox2.

Nếu textbox1 có dữ liệu ngày tháng + textbox2 có tên, textbox3 trống thì popup "ban chua nhap textbox3" và setforcus tai textbox3.

Nếu textbox1 có dữ liệu ngày tháng + textbox2 có tên + textbox3 có tên, thì popup "ban chua nhap textbox3" và setforcus tai textbox3.

Nếu textbox1 có dữ liệu ngày tháng + textbox2 có tên + textbox3 có tên, extbox4 trống, thì popup "ban chua nhap textbox4" và setforcus tai textbox4.

Xin cảm ơn !
 
(1) Bạn thử thêm như sau:
PHP:
Private Sub CmdNEW_Click()
Dim XuatNK As Long:                            Dim Msg As String
Const TD As String = " Chua Nhâp Du Liêu!"
   
If Me!LNK.Text = "" Then
    Msg = "TextBox 'LNK'"
ElseIf Me!NGAYXUAT.Text = "" Then
    Msg = "TextBox 'NgayXuat'"
Else
    ' . . . . . => Ban Viêt Tiêp Nha!   '
End If
If Msg <> "" Then
    MsgBox Msg & TD:                       Exit Sub
End If
With Sheets("Xuat")
    XuatNK = .[c65500].End(xlUp).Row + 1
    .Cells(XuatNK, "C").Value = Me!LNK.Text
    .Cells(XuatNK, "D").Value = Me!NGAYXUAT.Value       '  (3)  '
    .Cells(XuatNK, "E").Value = Me!KH.Text
    .Cells(XuatNK, "F").Value = Me!VHC.Text
    .Cells(XuatNK, "H").Value = Me!SERI1.Text
    .Cells(XuatNK, "I").Value = Me!SERI2.Text
End With
MsgBox "NhËp xong!", , " Th«ng b¸o"
End Sub

(2) Bạn muốn tìm đến dòng dữ liệu cũ (mà vừa cập nhật) để nhập dữ liệu vừa thay đổi?
Thì bạn bước đầu là fải tìm thôi! Nhưng quá trình 'tìm kiếm' thì xác định trường/cột chuẩn để tìm là 1 chuyện quan trọng;
Vậy bạn cho biết chúng ta cần tìm kiếm bắt đầu từ trường/cột nào?
Mà sao lạ là dữ liệu xuất của bạn lại không có fiếu xuất hay cái gì đó tương tự, nhỉ?

(3) Xem lại dòng lệnh trong macro trên

(4) Bạn nên có thói quen xài tên tốt hơn;
Nếu là mình thì mọi TextBox đều có tiếp đầu ngữ là 'tb'; Mọi nút lệnh đều bắt đầu là 'Cmd'; Mọi ListBox đều 'lb. . . '
Nếu là mình thì TextBox 'NGAYXUAT' sẽ là khó nhìn hơn là 'tbNgayX' hay tbNXuat'
Tuy các Control chưa đếm đủ 10 cái cũng nên có thói quen tuân thủ vậy

Ngay đến tên các Control ta cũng nên ghi cho dễ nhận ra, như 'NgayXuat' chứ không nên NGAYXUAT như bạn
'LISTDL' nên là ListDL,. . . .

Rất vui nếu được tiếp tục trao đổi cùng bạn!


Chân thành cám ơn ạ,

Do mình mới học VBA được vài ngày thôi ạ, nên các cách đặt tên mình chưa nắm rõ, mình sẽ ghi nhận các thông tin truyền đạt của bạn.

Với file này mình chỉ quản lý nhiệt kế thôi chứ k cần có phiếu xuất gì cả.

(2) dữ liệu cần sửa là dữ liệu đc chọn từ listbox bên trên và đc hiện xuống các textbox bên dưới ạ.
 
Upvote 0
Với file này mình chỉ quản lý nhiệt kế thôi chứ k cần có phiếu xuất gì cả..
Nhưng để cập nhật những sửa chửa cho dòng dữ liệu nào đó, ta cần fải tìm đến dòng đó; Chuyện này là hiển nhiên
Để tìm nhanh trong mớ bồng bông đó ta fải có sẵn fương fáp hay fương hướng định trước;
Nói đến đây, chúng ta nên mở trang tính 'Xuat' cần cập nhật ra & thảo luận về nó:
Trang tính đó có 11 trường/cột;
Cột đầu tiên là [STT] đang được áp công thức để tăng số TT lên mỗi lần là 1
Cột này có thể giúp ta tìm ra dòng cần thiết để cập nhật dữ liệu
Nhưng khổ 1 nổi là STT này chỉ có trên ListBox thôi; Bạn chưa đem xuống (& ghi lên) TextBox nào cả;
Nên việc truy cứu trách nhiệm hình sự của các TextBox thuộc STT nào sẽ là cả 1 vấn đề
Vì dòng dữ liệu trên ListBox không (& chưa) được lưu lại vô 1 tham biến nào cả.
(Có nghĩa là: Bạn chọn dòng nào đó trên ListBox (duy nhất của bạn) thì các TextBox sẽ nhận dữ liệu tương ứng từ dòng đó;) Sau khi nhận dữ liệu xong thì kết thúc chu trình) & tham biến bạn vừa xài trong macro sự kiện (ấn chuột lên ListBox) cũng theo mây về trời rồi còn đâu!

Tới đây bạn đã thấy các bước tiếp theo sẽ fải làm để ngõ hầu thực thi công cuộc tìm lại dòng dữ liệu (DL) cũ (cần cập nhật) chưa?
1 là bạn sẽ fải ghi lại [STT] của dòng DL trên Form
2 là truy lại trên danh sách cái [STT] thân iêu í của bạn trên ListBox
Một khi đã có nó ta mới có thể tìm nó trên trang tính đang chứa nó được.

Chúc vui!
 
Upvote 0
Nhưng để cập nhật những sửa chửa cho dòng dữ liệu nào đó, ta cần fải tìm đến dòng đó; Chuyện này là hiển nhiên
Để tìm nhanh trong mớ bồng bông đó ta fải có sẵn fương fáp hay fương hướng định trước;
Nói đến đây, chúng ta nên mở trang tính 'Xuat' cần cập nhật ra & thảo luận về nó:
Trang tính đó có 11 trường/cột;
Cột đầu tiên là [STT] đang được áp công thức để tăng số TT lên mỗi lần là 1
Cột này có thể giúp ta tìm ra dòng cần thiết để cập nhật dữ liệu
Nhưng khổ 1 nổi là STT này chỉ có trên ListBox thôi; Bạn chưa đem xuống (& ghi lên) TextBox nào cả;
Nên việc truy cứu trách nhiệm hình sự của các TextBox thuộc STT nào sẽ là cả 1 vấn đề
Vì dòng dữ liệu trên ListBox không (& chưa) được lưu lại vô 1 tham biến nào cả.
(Có nghĩa là: Bạn chọn dòng nào đó trên ListBox (duy nhất của bạn) thì các TextBox sẽ nhận dữ liệu tương ứng từ dòng đó;) Sau khi nhận dữ liệu xong thì kết thúc chu trình) & tham biến bạn vừa xài trong macro sự kiện (ấn chuột lên ListBox) cũng theo mây về trời rồi còn đâu!

Tới đây bạn đã thấy các bước tiếp theo sẽ fải làm để ngõ hầu thực thi công cuộc tìm lại dòng dữ liệu (DL) cũ (cần cập nhật) chưa?
1 là bạn sẽ fải ghi lại [STT] của dòng DL trên Form
2 là truy lại trên danh sách cái [STT] thân iêu í của bạn trên ListBox
Một khi đã có nó ta mới có thể tìm nó trên trang tính đang chứa nó được.

Chúc vui!

Tại ban đầu mình k cần đến cột STT nên mình k cho nó xuống textbox, nếu bây giờ mình đem nó xuống và hiển thị thì sẽ có cơ sở truy xuất dòng dữ liệu củ và có thể sửa đc không dạ?
 
Upvote 0
Hiện tại chắc đó là cách hiệu quả nhất để tìm ra dòng dữ liệu cũ (cần cập nhật)
 
Upvote 0
Bạn thử & tiếp tục các câu lệnh còn lại xem nha:
PHP:
Private Sub CMDNEW_Click()
Dim Rws As Long
Dim Rng As Range, sRng As Range
With Sheets("Xuat")
    Rws = .[A3].CurrentRegion.Rows.Count
    Set Rng = .[A3].Resize(Rws)
    Set sRng = Rng.Find(Me!tbSTT.Value, , xlValues, xlWhole)
    If Not sRng Is Nothing Then
        Rws = sRng.Row
        .Cells(Rws, "C").Value = Me!LNK.Text
        ' Ban Viêt Tiêp Nha! & Chúc Thành Công!     '
      
      
    Else
        MsgBox "Nothing"
    End If
  End With
End Sub

Nói thêm: Bạn không cần thiết fải xài 2 Forms đâu
Nếu là mình thì 1 Form thôi, 2 Pagers
Pager1 chỉ là 1 nút lệnh 'Lưu mới'
Pages2 gồm 1 ListBox & nút lệnh 'Cập nhật'
Các Control (TextBox)để trên Form (ngoài Pages)
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử & tiếp tục các câu lệnh còn lại xem nha:
PHP:
Private Sub CMDNEW_Click()
Dim Rws As Long
Dim Rng As Range, sRng As Range
With Sheets("Xuat")
    Rws = .[A3].CurrentRegion.Rows.Count
    Set Rng = .[A3].Resize(Rws)
    Set sRng = Rng.Find(Me!tbSTT.Value, , xlValues, xlWhole)
    If Not sRng Is Nothing Then
        Rws = sRng.Row
        .Cells(Rws, "C").Value = Me!LNK.Text
        ' Ban Viêt Tiêp Nha! & Chúc Thành Công!     '
     
     
    Else
        MsgBox "Nothing"
    End If
  End With
End Sub

Nói thêm: Bạn không cần thiết fải xài 2 Forms đâu
Nếu là mình thì 1 Form thôi, 2 Pagers
Pager1 chỉ là 1 nút lệnh 'Lưu mới'
Pages2 gồm 1 ListBox & nút lệnh 'Cập nhật'
Các Control (TextBox)để trên Form (ngoài Pages)
Cám ơn bạn nhiều ạ. Để mình làm thử ạ!
 
Upvote 0


cám ơn bạn nhiều lắm, mình làm đc rồi mà khi nhấp vô dòng tiêu để ak nó lỗi, có cách nào sửa k ạ
 
Lần chỉnh sửa cuối:
Upvote 0
Thì bạn fải thay giá trị 0 ở:
PHP:
Private Sub LISTDL_Click()
    With Me
        If .LISTDL.ListIndex >= 0 Then _
            .tbSTT = .LISTDL.List(.LISTDL.ListIndex, 0)
            .LNK = .LISTDL.List(.LISTDL.ListIndex, 2)
            .NGAYXUAT = .LISTDL.List(.LISTDL.ListIndex, 3)
            .KH = .LISTDL.List(.LISTDL.ListIndex, 4)
            .VHC = .LISTDL.List(.LISTDL.ListIndex, 5)
            .SERI1 = .LISTDL.List(.LISTDL.ListIndex, 7)
            .SERI2 = .LISTDL.List(.LISTDL.ListIndex, 8)
    End With
End Sub
 
Upvote 0
Xin chào tất cả anh em GPE,

Mình có câu hỏi về điều kiện nhập liệu trong textbox

1) Làm thế nào để đặt điều kiện chỉ cho nhập ngày,tháng,năm (dd/mm/yyyy) vào ô textboox7(hạn giao) và ngày nhập đó phải lớn hơn ngày hiện tại 5 ngày.
2) Làm thế nào để đặt điều kiện ở textbox8 (số lượng đặt lần 1) chỉ cho nhập dữ liệu là số với điều kiện giá trị phải nhỏ hơn hoặc bằng giá trị ở ô listbox.column(5) (số lượng đề nghị)

Mong tất cả anh em GPE giúp đỡ, xin cám ơn!
 

File đính kèm

  • LO IN 29-8.xlsm
    195.3 KB · Đọc: 3
Upvote 0
Web KT
Back
Top Bottom