Đ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 !
 
Đây chính xác là giải pháp mình đang tìm, mình cũng làm thế nhưng lại dùng checkbox, làm phát sinh vấn đề .
giả sử mình có tới 20 optionbutton
code optionbutton
private sub optionbutton_change()
if optionbutton.value = false then
commanbutton1.enable - false
else
commandbutton1.enable = true
end if

Đoạn này mình phải dùng vòng lặp như thế nào cho 20 optionbutton ?

Nếu từ 5 OptionButton trở lên, tôi không dùng nó nữa! Tôi sẽ chọn trên ListBox hoặc trên ComboBox cho khỏe! Rồi căn cứ vô đó mà thực thi code thôi.
 
Upvote 0
Mình vừa tìm được giải pháp, bạn lại hướng cho 1 mình 1 giải pháp khác, đúng sự học là bất tận. CẢM ƠN BẠN NHIỀU. để mình tìm hiễu cách bạn vừa nói, nếu bí lại nhờ bạn gợi ý cho vậy.
 
Upvote 0
Mình vừa tìm được giải pháp, bạn lại hướng cho 1 mình 1 giải pháp khác, đúng sự học là bất tận. CẢM ƠN BẠN NHIỀU. để mình tìm hiễu cách bạn vừa nói, nếu bí lại nhờ bạn gợi ý cho vậy.

Đây, bạn xem bài này để tham khảo cho bài của bạn:

http://www.giaiphapexcel.com/forum/...trol-gì-Excel-có-nó-không&p=447373#post447373

Bài này tôi dùng ComboBox làm điều kiện chọn lựa đấy!
 
Upvote 0
Chào bạn!

Tôi cũng đang mày mò VBA như bạn đây. Hồi trước tôi có làm 1 vài báo cáo có sử dụng VBA. Hôm nay đọc Topic của bạn, không biết phương án xuất báo cáo của tôi giúp ích được gì cho bài toán bạn đặt ra bên trên không?
Tôi gửi file theo đính kèm trong đó:

- Tôi tạo thêm 1 Form mới, cho phép bạn tùy ý lựa chọn những mã hàng nào bạn muốn gộp lại thành nhóm với nhau và lưu Tên, Thông tin của nhóm đó trong Sheet Tiện ích => chính vì vậy bạn muốn bao nhiêu nhóm cũng được, và mỗi nhóm gồm mã hàng nào là tùy ý, và sửa đổi cũng tùy ý luôn.

- Ở đây tôi chỉ dừng lại ở phần tạo cho bạn các nhóm khác nhau và để ngỏ nút lệnh Export Report để bạn tùy ý thích làm những gì theo yêu cầu của bạn.
- Cách làm: Bạn lựa chọn các mã hàng trong Field rồi nhấn mũi tên sang ngang để xác nhận lựa chọn và hiển thị ở bên Preview, nếu muốn lưu lại thì điền tên vào Input Record's Name và nhấn Make/ Update. Với những Nhóm bạn đã lưu từ trước thì lựa chọn từ Input Record's NameEnter -> sẽ hiển thị ở Preview

Cách viết code của tôi cũng dở lắm nên tôi nghĩ có lẽ bạn sẽ dễ hiểu.
Chúc bạn vui vẻ!
 

File đính kèm

  • ko nhan ma.zip
    63.8 KB · Đọc: 51
Upvote 0
Button minimize form (mình mới tìm được trên NET)

Dim dheight As Double
Dim dwidth As Double

Private Sub ToggleButton1_Click()
If ToggleButton1.Value = True Then
Me.Height = Me.Height * 0.15
Me.Width = Me.Width * 0.15
Else
Me.Height = dheight
Me.Width = dwidth
End If
End Sub

Private Sub UserForm_Initialize()
dheight = Me.Height
dwidth = Me.Width
End Sub

Ngoài cách này ra + ngoài cách minimize + maximize, còn cách nào khác để minimize form trong vba excel không mọi người ?
 
Upvote 0
Button minimize form (mình mới tìm được trên NET)

Dim dheight As Double
Dim dwidth As Double

Private Sub ToggleButton1_Click()
If ToggleButton1.Value = True Then
Me.Height = Me.Height * 0.15
Me.Width = Me.Width * 0.15
Else
Me.Height = dheight
Me.Width = dwidth
End If
End Sub

Private Sub UserForm_Initialize()
dheight = Me.Height
dwidth = Me.Width
End Sub

Ngoài cách này ra + ngoài cách minimize + maximize, còn cách nào khác để minimize form trong vba excel không mọi người ?
Thì tạo 2 nút MAX, MIN trên thanh tiêu đề là xong
PHP:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
 (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
 (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
PHP:
Private Sub UserForm_Initialize()
  Dim hWnd As Long
  hWnd = FindWindow("ThunderDFrame", Me.Caption)
  SetWindowLong hWnd, -16, &H84CF0080
End Sub
 
Upvote 0
Sub hiden()
Sheets("sheet1").[b10:b20].Select
For Each Clls In Selection
If Clls > 0 Then
Clls.EntireRow.Hidden = True
End If
Next
End Sub

Theo code trên, trong vùng b10:b20, dòng nào có dữ liệu sẽ ẩn.
Vd, trong vùng b10:b20, mình có dữ liệu từ b10 đến b15
Vậy, sửa code thế nào để ẩn từ b10 đến b14
Để lại b15 không ẩn (mặc dù b15 vẫn có data)
Mong mọi người chỉ giúp, xin cảm ơn.
 
Upvote 0
Sub hiden()
Sheets("sheet1").[b10:b20].Select
For Each Clls In Selection
If Clls > 0 Then
Clls.EntireRow.Hidden = True
End If
Next
End Sub

Theo code trên, trong vùng b10:b20, dòng nào có dữ liệu sẽ ẩn.
Vd, trong vùng b10:b20, mình có dữ liệu từ b10 đến b15
Vậy, sửa code thế nào để ẩn từ b10 đến b14
Để lại b15 không ẩn (mặc dù b15 vẫn có data)
Mong mọi người chỉ giúp, xin cảm ơn.

Tôi chưa thấy ẩn cell bao giờ, chỉ có ẩn dòng, ẩn cột thôi. Ý bạn muốn nói là ẩn dòng?

PHP:
Sub hiden()
      Dim Clls As Range
      For Each Clls In Sheets("sheet1").[b10:b20]
            If Clls.Address = "$B$15" Then
                  Clls.EntireRow.Hidden = False
            Else
                  If Clls > 0 Then
                        Clls.EntireRow.Hidden = True
                  Else
                        Clls.EntireRow.Hidden = False
                  End If
            End If
      Next
End Sub
 
Upvote 0
Sub hiden()
Dim Clls As Range
For Each Clls In Sheets("sheet1").[b10:b20]
If
Clls.Address = "$B$15" Then
Clls
.EntireRow.Hidden = False
Else
If
Clls > 0 Then
Clls
.EntireRow.Hidden = True
Else
Clls.EntireRow.Hidden = False
End
If
End If
Next
End Sub

Code này cố định dòng b15, nhưng data mình nhập vào là liên tục nên địa chỉ là tương đối chứ không là tuyệt đối b15 được.
thx bạn.
 
Upvote 0
Sub hiden()
Dim Clls As Range
For Each Clls In Sheets("sheet1").[b10:b20]
If
Clls.Address = "$B$15" Then
Clls
.EntireRow.Hidden = False
Else
If
Clls > 0 Then
Clls
.EntireRow.Hidden = True
Else
Clls.EntireRow.Hidden = False
End
If
End If
Next
End Sub

Code này cố định dòng b15, nhưng data mình nhập vào là liên tục nên địa chỉ là tương đối chứ không là tuyệt đối b15 được.
thx bạn.

Thì bạn cứ sửa lại địa chỉ ô nếu dữ liệu của bạn có thay đổi. Thuật toán là vậy, bạn tùy biến theo thực tế chứ!

Vấn đề của bạn nói tương đối, tuyệt đối ở môi trường VBA là không chính xác đâu nha. Bạn thấy tôi ghi "$B$15" là bạn cho tuyệt đối à? Đây là địa chỉ mà .Address nó quét qua thôi, chứ không cố định hàng cột gì ở đây cả đâu nhé! Bạn mà sửa lại mà bỏ 2 dấu $$ đi là sai đấy!
 
Lần chỉnh sửa cuối:
Upvote 0
mình chưa phân biệt được cách dùng "=*ha" và "*ha" trong hàm if và sumif, hỏi "ngu" 1 chút, mong mọi người đừng "ném gạch"
Vui lòng xem file.
Cảm ơn mọi người
 

File đính kèm

  • file.xls
    16 KB · Đọc: 9
Upvote 0
Cho mình hỏi thêm chút xíu nữa ( tham lam quá ^.^)
Trong workbook excel, menu view/toolbars/control toolbox
vẽ 1 textbox1 lên sheet
Cột A sheet1 là ngày tháng định dạng 11/07/2012.
làm sao để khi nhập vào textbox1 11/07/2012 thì tất cả ngày tháng khác ẩn đi, chỉ để lại các dòng có ngày 07/11/2012.
Khi xóa 11/7/2012 (textbox1 trống) thi 2 hiện tất cả ngày tháng trong cột A.
Cảm ơn mọi người.
 
Upvote 0
Gửi file đính kèm, mong mọi người chỉ giúp, cảm ơn.
 

File đính kèm

  • hien-an.xls
    17 KB · Đọc: 8
Upvote 0
Mình đã làm được (gần 1 ngày trời :( )
Cảm ơn mọi người.
 
Upvote 0
Cho mình hỏi thêm chút xíu nữa ( tham lam quá ^.^)
Trong workbook excel, menu view/toolbars/control toolbox
vẽ 1 textbox1 lên sheet
Cột A sheet1 là ngày tháng định dạng 11/07/2012.
làm sao để khi nhập vào textbox1 11/07/2012 thì tất cả ngày tháng khác ẩn đi, chỉ để lại các dòng có ngày 07/11/2012.
Khi xóa 11/7/2012 (textbox1 trống) thi 2 hiện tất cả ngày tháng trong cột A.
Cảm ơn mọi người.

Sao không làm AutoFilter đi? Cần gì phải TextBox cho mệt vậy?

mình chưa phân biệt được cách dùng "=*ha" và "*ha" trong hàm if và sumif, hỏi "ngu" 1 chút, mong mọi người đừng "ném gạch"
Vui lòng xem file.
Cảm ơn mọi người
Bài này lẽ ra là hỏi trong box hàm và công thức, nhưng thôi, topic này cũng do bạn tạo nên tôi trả lời luôn!

A9: =SUMIF($A$2:$A$8,"*ha*",$E$2:$E$8)

A10: =SUMIFS($E$2:$E$8,$A$2:$A$8,"*ha*",$B$2:$B$8,"nv")

Xem file.
 

File đính kèm

  • Copy of file.xls
    20 KB · Đọc: 23
Lần chỉnh sửa cuối:
Upvote 0


mình thấy bài này rất hay, nhờ các bạn hướng dẫn khi nhấp chọnbuttion thì listbox lấy dữ liệu sheet tướng ứng. như file mẫu. em cảm ơn.

( sao mình gõ tiếng việt trên này không được nhỉ, copy từ wsang.)

 

File đính kèm

  • LIST BOX THEO BUTTION.xls
    40.5 KB · Đọc: 15
Upvote 0


mình thấy bài này rất hay, nhờ các bạn hướng dẫn khi nhấp chọnbuttion thì listbox lấy dữ liệu sheet tướng ứng. như file mẫu. em cảm ơn.

( sao mình gõ tiếng việt trên này không được nhỉ, copy từ wsang.)
Bài này chả có gì hay hết, có hoạt động gì đâu mà hay?

Nếu bạn muốn hỏi bài thì đề nghị bạn mở một đề tài khác nhờ giúp cho đàng hoàng, thấy màu dòng đỏ trên người ta lầm tưởng là bạn đang chia sẻ một ứng dụng nào đó, mở ra chả có gì để gọi là hay ho cả.
 
Upvote 0
cảm ơn bạn, bài hay là bài các bạn đẳ đăng và công việc của mình tương tự, khác căn cứ tuỳ chọn để lấy dữ liệu sheet tương ứng vào điều kiện data validtation.
 
Upvote 0
chào các anh chị ạ!

Em đang có 1 vấn đề chưa làm đc ở file em, kính nhờ anh chị xem và hỗ trợ giúp em ạ.

1/ ràng buộc các phần nhập của Userform phải có dữ liệu mới cho phép nhập (trừ cái seri2 k có hay có vẫn nhập đc), sau khi nhập mới dữ liệu thì dữ liệu sẽ đc xóa khỏi các textbox

2/ cái nút update lại dữ liệu viết code như thế nào ạ xin trợ giúp!

3/ cái ngày xuất em chưa định dạng đc theo kiểu mm/dd/yyyy

Cám ơn anh chị ạ!
 

File đính kèm

  • THEO DOI NHIET KE - thu nghiem.xlsm
    1,006.6 KB · Đọc: 3
Lần chỉnh sửa cuối:
Upvote 0
Em đang có 1 vấn đề chưa làm đc ở file em, kính nhờ anh chị xem và hỗ trợ giúp em ạ.
1/ ràng buộc các phần nhập của Userform phải có dữ liệu mới cho phép nhập (trừ cái seri2 k có hay có vẫn nhập đc), sau khi nhập mới dữ liệu thì dữ liệu sẽ đc xóa khỏi các textbox
2/ cái nút update lại dữ liệu viết code như thế nào ạ xin trợ giúp!
3/ cái ngày xuất em chưa định dạng đc theo kiểu mm/dd/yyyy
(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!
 
Upvote 0
Web KT
Back
Top Bottom