tự động tìm khi nhập mã số

Liên hệ QC
Trước hết bạn nên bỏ khóa (ý là nhập pass mở Protect), rồi sau đó chọn toàn bộ dữ liệu -> Chọn Format Cells -> chọn tab Protection -> Bỏ chọn mục Locked -> OK
nếu như vậy thì file đều điều chỉnh được hết dù đã khóa sheet, không đúng với điều kiện được đặt ra.
Ngoài ra, file chỉ cần nhập liệu, enter xong là tự động protect chứ không chờ được đến khi save file.
Sub trên mình post lên, file mình vẫn auto filter rất tốt khi chưa có chèn thêm code mới mới của bác.
Bác xem và chỉ hộ mình nhé.thanks
 
Lần chỉnh sửa cuối:
Bạn gửi file lên lại đi!
Mình thấy bạn nói có vẻ kô đúng lắm đâu. Mình test code lại thấy nếu không bỏ Locked trước thì các ô trống không thể nhập dữ liệu được.
Thứ hai, nếu bạn không dùng code thêm của mình thì mình vẫn không thể nào Fillter được, code báo lỗi ở dòng Fillter khi nhấn vào B2.
Mình không hiểu bạn đặt code ở đâu vậy.
Thân.
 
Ok. để mình đưa file lên cho bác xem hộ.ở sheet 4 ( ban hang) va sheet 3 (Quy). mình muốn khóa những ô có dữ liệu .Riêng sheet 4 thì cả b1 và b2 có dữ liệu vẫn không khóa.
bạn xem lại sub và test hộ mình 2 sheet đó nhé.
thanks
 

File đính kèm

Vậy thôi! Đúng ý rồi nha! Thân.
 

File đính kèm

Lần chỉnh sửa cuối:
Bác Po_pikachu ơi ,có thể sau khi nhấn save thì mới protect được không chứ cứ sau khi di chuyển cll hay enter bị protect liền thì không ổn lắm bác ạh.
Ở sheet 3, mình không cần ghi sub mà ghi thêm vào gần cuối sub ở sheet 4 như hôm qua bác hướng dẫn được chứ?
Sheet4.Protect "DANH"
Sheet.Protect "DANH"
End Sub

Cám ơn bác đã giải thích ý nghĩa khác nhau của 2 sub ( thú thật trước đây mình thắc mắc nhưng chưa có dịp hỏi)
 
Nếu sau khi save mới Protect thì việc các dữ liệu có sẳn cũng có thể bị thay đổi thì sao đây? Còn việc thêm Sheet3.Protect "DANH" thì mình không nói nhưng bạn nói rằng Sheet (Quy) chỉ khóa các ô có dữ liệu thôi còn ô trống thì có thể thêm dữ liệu vào thì sao? Vì lệnh này chỉ khóa các ô đã được Locked thôi. Mà bên Quy không có gì làm thay đổi được lệnh Locked (true hay False) thì mặc định sao sẽ để y vậy. Tức là ô nào Locked rồi thì không sửa được, còn chưa thì bạn thêm sửa tùy ý đó.
 
Lần chỉnh sửa cuối:
dạ đúng rồi. sheet 3 chính là sheet Quy đó bác.
những ô trống thêm dữ liệu vô tư. ô có dữ liệu sau khi lưu, chỉ khi unprotect với đúng pass thì mới được chỉnh sửa
Những ô nhập liệu xong, chưa lưu, cũng vẫn chỉnh sửa được.
 
Sao không nói sớm. Vậy xem như code bên Sheet3 không cần thiết. Vậy còn code bên Sheet "Ban Hang" thì sao, bạn cho người ta nhập những chỗ trống và ô B1, B2 thôi còn ô khác thì chỉ có bạn mới thay đổi được đúng không? Nếu muốn sau khi nhấn Save thì hai sheet tự Protect thì nhập 1 đoạn code này vào trong ThisWorkbook nữa.
Mã:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Sheet3.Protect "DANH" Sheet4.Protect "DANH" End Sub
 
Lần chỉnh sửa cuối:
Bác Hiểu Gần đúng ý Em Rồi. ở đây Không Chỉ Sheet Ban Hang Mà Sheet Quy Cũng Vậy. đều Phải Có Pás Mới Chỉnh Sửa ô Có Dữ Liệu SAU KHI ĐƯỢC LƯU. Mình Không Bỏ Sub ở Sheet 3, Mình Vẫn Giữ Nguyên Tuy Nhiên, Nó Vẫn Tự Save Sau Khi Di Chuyển Hay Enter
 
Lần chỉnh sửa cuối:
Mình đóng file và mở lại để kiểm tra. Mình Chỉ cần di chuyển sang ô khác, enter hay 1 cái lick chuột bất cứ nơi đâu đều khiến sheet tự động protect hết. nhờ bác giúp nốt ạh.
em chuyển lại file
 

File đính kèm

Thì chẳng phải đã Protect rồi sao! Nếu bạn nghỉ rằng muốn khóa cả những ô không có dữ liệu luôn thì chỉ cần bỏ dòng này đi là xong.
Mã:
[COLOR=red]Target.Locked = False Else[/COLOR]
 
Lần chỉnh sửa cuối:
Dạ đúng rồi mình muốn protec tất cả cell có dữ liệu trong 2 sheet này.
Tuy nhiên cell có dữ liệu chỉ được khóa không cho chỉnh sửa sau khi save thôi còn chưa save họ vẫn chỉnh sửa được. ai có pass unprotec thì mới chỉnh được.
Riêng đối với sheet 4 ( ban hang) thì còn auto filter được đồng thời riêng 2 cell B1:B2: được phép chỉnh sửa khi có dữ liệu sau khi save.
 
File này có những tính năng sau: +Sheet4 (BAN HANG): -Sheet tự khóa -Có thể nhập dữ liệu ở ô B1 và B2 -Có thể nhập dữ liệu ở các ô trống -Các ô có dữ liệu sẽ bị khóa hết, ngoại trừ B1 và B2 và các ô trống +Sheet3 (QUY): -Sheet tự khóa -Các ô có dữ liệu thì tự khóa, các ô trống thì có thể nhập liệu được +File: -Khi save lại rồi thì file sẽ tự khóa sheet4 và sheet3 +Chủ (boss): -Muốn được thoải mái sửa dữ liệu thì phải mở sheet5 (loc chua tien) ra, sửa ô A1 = 1 thì mới sửa chữa dữ liệu ở Sheet 4 và 3 thoải mái được. -Bạn nên đặt thêm password cho VBA luôn là tốt rồi! -Để đặt pass cho VBA, bạn vào Tools -> VBAProject Properties -> Chọn tab Protection -> nhấp chọn ô Lock và nhập hai pass giống nhau vào hai ô trống ở dưới -> OK. Nếu không muốn nhập dữ liệu ở các ô trống thì là như thao tác ở mục #75. Thân.
 

File đính kèm

Lần chỉnh sửa cuối:
Cám ơn bác.
Việc khóa pass cho VBA em vẫn sử dụng.
File này mình làm hộ 1 người bạn. Em tính sử dụng form mẫu của bác okebab nhưng vẫn có bất tiện khi khóa sheet thì không filter được. Khi đọc đến chủ đề của bạn lehuyluan, mình thấy hợp với ý muốn của mình. Do vậy mình đã làm phiền các bác.
Mình thấy vấn đề:
+Chủ (boss):
-Muốn được thoải mái sửa dữ liệu thì phải mở sheet5 (loc chua tien) ra, sửa ô A1 = 1 thì mới sửa chữa dữ liệu ở Sheet 4 và 3 thoải mái được
thì chỉ ai vô tình xóa dữ liệu A1 tại là vô hiệu háo pass rồi. vậy thì ta cũng đâu cần tạo pass và viết code nữa. cứ tool/protect lại gọn.
Mình thấy bác khóa sheet mà không sử dụng macro có 1 lợi thế : sử dụng được 1 phần tính năng sẵn có của excel nên mình rất thích . Nhưng lại khóa sheet 1 cách hoàn toàn chi có 1 tác động dù rất nhỏ tới file thì lại rất bất tiện.
Để em up form mẫu của bác bab ( chỉ sử dụng cách 2 , ko sử dụng cách 1 vì cách 1 tượng tự của bác Po_Pikachu) lại để bác giúp em nha.
 
Lần chỉnh sửa cuối:
Bạn nói là "vô tình xóa dữ liệu A1" thì mình nói là không được. Vì: 1.VBA đã bị khóa 2.Sheet5 (loc chua tien) đã bị ẩn. Mà chỉ có thể mở ẩn này nếu có pass của VBA thôi! 3.Bạn cũng có thể khóa protect được sheet5 cơ mà! Đây củng là 1 cách hay đấy!
 
Lần chỉnh sửa cuối:
dạ đúng. Mình muốn chỉnh sửa sau khi lưu vì :
1. người nhập liệu không phải lúc nào cũng nhập đúng 100%. Do vậy họ cần phải kiểm tra lại trước khi save. Sau khi save mới không cho chỉnh sửa.
2. Sau khi lưu thì tất cả dữ liệu được update trước khi save không cho chỉnh sửa. Ở những cell trống, khi có nghiệp vụ phát sinh, họ lại tiếp tục nhập vào các ô trống và dữ liệu vừa nhập đó vẫn có thể chỉnh sửa được nếu chưa save.
3. Người chủ chỉ khi cần thiết mới đến mở pass điều chỉnh file thôi chứ họ không có mặt thường xuyên ở đó.
còn ở những code trên là hoàn toàn không chỉnh sửa nếu có sự di chuyển dù file đó vừa nhập liệu xong chưa lưu. khi thay đổi giá trị A1 tại sheet lọc chua tien thì xem như vô hiệu hóa toàn bộ lệnh protect sheet mà không thay đổi được số liệu vị trí A1 thì thật bất tiện nếu ai đó lỡ gõ lộn 1 ký tự vào file.
Tiện đây nhờ bác giúp giải thích giùm mình ý nghĩa của code này nha:
Selection.SpecialCells(xlCellTypeConstants, 23).Locked = True
Selection.SpecialCells(xlCellTypeFormulas, 23).Locked = True
Thanks
 
Lần chỉnh sửa cuối:
Bạn thử lại xem còn gì thiếu xót không nha! Mình có làm thêm 2 chức năng: 1.Là các ô có công thức thì có thể bị ẩn đi hết. Bạn có thể bỏ tính năng này bằng cách tìm các dòng này và xóa chúng đi.
Mã:
.Cells.FormulaHidden = False ... Selection.SpecialCells(xlCellTypeFormulas, 23).FormulaHidden = True
2.Là do dòng này "Selection.SpecialCells(xlCellTypeFormulas, 23).Locked = True" là cho các ô có công thức nhưng chưa có dữ liệu cũng bị khóa nốt. Nên khắc phục nó bằng cách thêm 1 đoạn code trong Sheet để khi khóa rồi mà ô đó (có công thức) vẫn trống thì có thể nhập công thức khác hoặc nhập dữ liệu trực tiếp.
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) On Error Resume Next If Sheet4.prot1.Caption = "UnProtect" And Target.Value = "" Then     Sheet4.unprotect "DANH"     Target.Locked = False     Sheet4.Protect "DANH", True, True, True End If End Sub
Do tính năng quá nhiều khi save nên tình trạng save có thể hơi lâu hơn bình thường. Bạn đừng can thiệp vào hệ thông nha! Nếu không sẽ bị treo máy đó. Nghĩa:
Selection.SpecialCells(xlCellTypeConstants, 23).Locked = True | Tìm tất cả các ô có giá trị và đặt lệnh khóa chúng lại Selection.SpecialCells(xlCellTypeFormulas, 23).Locked = True | Tìm tất cả các ô có công thức và khóa chúng lại
Thân.
 

File đính kèm

Lần chỉnh sửa cuối:
Tiện đây nhờ bác giúp giải thích giùm mình ý nghĩa của code này nha:
Selection.SpecialCells(xlCellTypeConstants, 23).Locked = True
Selection.SpecialCells(xlCellTypeFormulas, 23).Locked = True
Thanks
Bạn thí nghiệm như sau:
1> Mở 1 file mới và gõ nhăng nhít gì đó vào 1 vài cell (có thể gõ cell cách cell)
2> Chọn nguyên cả vùng này
3> Bật chức năng Record macro lên
4> Bấm Ctrl + G\Special\Constants rồi OK
5> Bấm Ctrl +1, trong tab Protection bạn check vào Locked
6> Tắt Record macro, bấm Atl + F11 và xem chúng viết cái gì
Thí nghiệm tiếp: Cũng làm thế nhưng bước 4 bạn chọn món khác trong hộp Goto rồi xem code... Từ đó bạn có thể suy ra được rất nhiều trò hay (cả Current Region mà nhiều bạn đã từng hỏi cũng có trong này)
Ghi chú:
Trong hộp Goto bạn đếm từ trên xuống, từ trái qua phải, bạn thấy mục Constants nằm ở vị trí thứ 2, đúng không? vậy có thể thay:
Selection.SpecialCells(xlCellTypeConstants, 23)
Thành
Selection.SpecialCells(2, 23)
Quá tuyệt !!!
 
Lần chỉnh sửa cuối:
Po_phikachu ơi. Vậy lại phải làm 2 button macro rồi.
Mình vào file của mình, mình tạo button bằng view/ toolbar/ form. rồi cho record macro với tuần tự tên prot1_lick() và pròt_lick(). sau đó copy toàn bộ các câu lệnh từ file bạn đính kèm vào file mình nhưng vẫn báo lỗi. ( lý do mình muốn tự thực hành làm macro này và file mình gởi lên cho bạn có vài sheet cho nó nhẹ ( trong đó có 2 sheet chính ) trong khi đó file gốc mình có nhiều sheet lắm.
 
Tạm thời gửi bạn file này theo ý bạn, nhưng mình còn hai điều chưa khắc phục được. 1.Là khi bạn quét chọn 1 khu vực nào đó thì nó tự động khóa lại. 2.Là những ô có công thức nhưng chưa có giá trị thì có cái Locked = False, có cái Locked = True. Mình không hiểu sau không thể khống chế được các ô đó. Không biết các cao thủ khác có ý kiến gì không? @hong gam: Nếu bạn đặt code vào trong module thì các nút lệnh Protect (Unprotect) phải đặt cùng tên (NAME), và nhớ đặt lại code trong Thisworkbook. Nhưng cũng có cái lợi là bạn chỉ copy button đó qua các sheet và cùng 1 code gọi nút lệnh cho tất cả các sheet luôn.
 

File đính kèm

Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom