Viết code thiết lập một vùng dữ liệu chỉ được nhập đúng theo format cho trước (1 người xem)

Liên hệ QC

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

ngocrin1

Thành viên chính thức
Tham gia
9/5/09
Bài viết
55
Được thích
10
Chào các bạn,

Mình muốn viết một đoạn code để thiết lập cho một vùng dữ liệu cho trước phải nhập đúng theo kiểu format mà mình yêu cầu nhưng ko biết viết như thế nào. Các bạn giúp mình với.

Ví dụ: Tại vùng dữ liệu cột A mình muốn thiết lập dữ liệu theo kiểu ngày/tháng/năm thì người dùng chỉ được phép gõ dữ liệu theo chuẩn cho phép như vậy. Nếu nhập sai sẽ báo lỗi không cho nhập (Kiểu tương tự như Validation vậy đó)
 
Gợi ý:
1. Bạn record macro lại thao tác tạo validation -> có đoạn code
2. Tại sheet cần thiết lập, tạo sự kiên selection change -> đưa dòng code
if not intersect([A1:A10],target) is nothing then
.... (Copy đoạn code có ở bước 1 vào đây)
end if

A1:A10 là vùng cần thiết lập validation

thường thì tôi làm thế, nhưng ko có máy ở đây để thử. Rất xin lỗi.
 
Upvote 0
Chào các bạn,

Mình muốn viết một đoạn code để thiết lập cho một vùng dữ liệu cho trước phải nhập đúng theo kiểu format mà mình yêu cầu nhưng ko biết viết như thế nào. Các bạn giúp mình với.

Ví dụ: Tại vùng dữ liệu cột A mình muốn thiết lập dữ liệu theo kiểu ngày/tháng/năm thì người dùng chỉ được phép gõ dữ liệu theo chuẩn cho phép như vậy. Nếu nhập sai sẽ báo lỗi không cho nhập (Kiểu tương tự như Validation vậy đó)
Đây là đoạn Code tôi record macro, có chỉnh sửa chút.
Các bước làm như sau:
1. Click chuột phải vào sheet bạn muốn thiết lập Validation, chọn view code.
2. Dán đoạn code sau vào:
[gpecode=vb]Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect([A2:A10], Target) Is Nothing Then
With Intersect([A2:A10], Target)
.Validation.Delete
.Validation.Add xlValidateDate, , , Formula1:="01/01/2010", Formula2:="=TODAY()"
End With
End If
End Sub[/gpecode]

3. Bạn thay A2:A10 bằng vùng thiết lập theo ý bạn.
Thay Formula1, Formula2 bằng khoảng ngày tháng bạn muốn đặt.

P/s: tuy nhiên nếu người nhập copy dữ liệu từ ô khác vào thì phương án này cũng phá sản. Các thành viên khác có giải pháp nào hay hơn xin chia sẻ.
 
Lần chỉnh sửa cuối:
Upvote 0
tuy nhiên nếu người nhập copy dữ liệu từ ô khác vào thì phương án này cũng phá sản. Các thành viên khác có giải pháp nào hay hơn xin chia sẻ

Cảm ơn bạn rất nhiều. Mình ko dùng Validation mà chuyển qua code cũng vì bị lý do này. Hiện mình chỉ có giải pháp là khóa lun chức năng paste. Nhưng nếu bạn nào có giải pháp ko khóa chức năng này mà vẫn thực hiện đúng ý đồ thì quá tuyệt.
 
Upvote 0
Cảm ơn bạn rất nhiều. Mình ko dùng Validation mà chuyển qua code cũng vì bị lý do này. Hiện mình chỉ có giải pháp là khóa lun chức năng paste. Nhưng nếu bạn nào có giải pháp ko khóa chức năng này mà vẫn thực hiện đúng ý đồ thì quá tuyệt.
Cách thì có đó. Nhưng trí tưởng tượng của tui hông có bay xa được như bạn F1, ít nhất phải có cái file để mà làm chớ.
 
Upvote 0
Cách thì có đó. Nhưng trí tưởng tượng của tui hông có bay xa được như bạn F1, ít nhất phải có cái file để mà làm chớ.
OK. Mình đã gửi file.

1. Click chuột phải vào sheet bạn muốn thiết lập Validation, chọn view code.
2. Dán đoạn code sau vào:
Sẵn tiện cho mình hỏi lun là trong cùng một worksheet mình muốn thực hiện 2 thủ tục Private Sub Worksheet_SelectionChange thì có được ko? mình thử để 2 thủ tục thì nó báo lỗi. Thanks!
 

File đính kèm

Upvote 0
OK. Mình đã gửi file.


Sẵn tiện cho mình hỏi lun là trong cùng một worksheet mình muốn thực hiện 2 thủ tục Private Sub Worksheet_SelectionChange thì có được ko? mình thử để 2 thủ tục thì nó báo lỗi. Thanks!

Cái này thì sử dụng sheet Form cho đơn giản.

Và chờ các thành viên khác giúp nhé (vì tôi thấy có nhiều người đang xem bài của bạn), còn hiện tại tôi bận chưa thể giúp.
 
Upvote 0
1. Thôi với nhu của bạn thì bạn tham khảo link sau:http://www.giaiphapexcel.com/forum/showthread.php?48634-Cấm-không-cho-copy-và-paste
2. Trong 1 sheet thì chỉ xài được có 1 sub sự kiện (cùng tên), nhưng bạn có quyền chọn nhiều vùng trong cái If đó....

Cảm ơn bạn. Vậy trong một sheet mình vừa muốn dùng code validation như trên và code ko cho paste thì làm như thế nào khi 2 sự kiện trên có cùng tên?
 
Upvote 0
OK. Mình đã gửi file.


Sẵn tiện cho mình hỏi lun là trong cùng một worksheet mình muốn thực hiện 2 thủ tục Private Sub Worksheet_SelectionChange thì có được ko? mình thử để 2 thủ tục thì nó báo lỗi. Thanks!
[gpecode=vb]
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect([C5:C100], Target) Is Nothing Then
With Intersect([C5:C100], Target)
.Validation.Delete
.Validation.Add xlValidateDate, , , Formula1:="01/01/2015", Formula2:="=Today()"
End With
Application.CutCopyMode = False
End If
If Not Intersect([H5:H100], Target) Is Nothing Then
With Intersect([H5:H100], Target)
.Validation.Delete
.Validation.Add xlValidateWholeNumber, , , Formula1:="0", Formula2:="10"
End With
Application.CutCopyMode = False
End If
End Sub
[/gpecode]
 
Lần chỉnh sửa cuối:
Upvote 0
OK. Mình đã gửi file.


Sẵn tiện cho mình hỏi lun là trong cùng một worksheet mình muốn thực hiện 2 thủ tục Private Sub Worksheet_SelectionChange thì có được ko? mình thử để 2 thủ tục thì nó báo lỗi. Thanks!

Yêu cầu của bạn nên dùng UserForm cho khỏe. Mọi thứ bạn khống chế trên UserForm toàn bộ thì sẽ không lo nhập liệu sai chuẩn
Còn nhập trên sheet mà muốn khống chế này nọ là chuyện KHÓ VÔ CÙNG (có làm cũng chẳng đi tới đâu)
 
Upvote 0
Web KT

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

Back
Top Bottom