Có cách nào chỉ cho nhập dữ liệu vào ô trống còn ô đã có dữ liệu thì không cho nhập?

Liên hệ QC
Status
Không mở trả lời sau này.

sieunhi10079

Thành viên thường trực
Tham gia
26/2/07
Bài viết
230
Được thích
196
Có cách nào giúp em việc này với!

Không biết vấn đề em đưa ra có thể giải quyết được không nữa, vì em thấy khó quá! Vấn đề là: trong một sheet có những ô có dữ liệu và những ô không có dữ liệu. Có cách nào chỉ cho nhập dữ liệu vào ô trống còn ô đã có dữ liệu thì không cho nhập!
Rất mong nhận được sự giúp đỡ của các anh chị!
 
- Mình đố bạn thay đổi được dử liệu của cell đã có nếu không bít pass hìhì !!!
- Tuỳ theo nhu cầu có thể là Workbook cho toàn bộ và WorkSheet cho Sheet.
Mã:
Dim OldValue
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
   OldValue = Target.Cells(1, 1)
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Not IsEmpty(OldValue) And (OldValue <> Target.Cells(1, 1)) Then
        If InputBox("Password:", "Yeu cau nhap Password ""tuan""") <> "tuan" Then
            Application.Undo
        End If
    End If
End Sub
 
Lần chỉnh sửa cuối:
Đây cũng là một cách khóa ô có dữ liệu.
Thực chất là lock các ô có dữ liệu và protect bảng tính khi bảng tính có thay đổi.
Mã:
[/FONT]
[FONT=Verdana]Private Sub Worksheet_Change(ByVal Target As Range)[/FONT]
[FONT=Verdana]On Error Resume Next[/FONT]
[FONT=Verdana]Application.ScreenUpdating = False[/FONT]
[FONT=Verdana]ActiveSheet.Unprotect[/FONT]
[FONT=Verdana]Cells.Locked = False[/FONT]
[FONT=Verdana]Cells.SpecialCells(xlCellTypeConstants, 23).Locked = True[/FONT]
[FONT=Verdana]Cells.SpecialCells(xlCellTypeFormulas, 23).Locked = True[/FONT]
[FONT=Verdana]ActiveSheet.Protect[/FONT]
[FONT=Verdana]End Sub[/FONT]
[FONT=Verdana]
 

File đính kèm

  • LockCell.zip
    10 KB · Đọc: 909
Vấn đề của bạn Sieunhi10079 đề cập cũng khả thi mà, vì trên thực tế có những file bảng tính người ta thiết kế công thức tính toán hoàn chỉnh rồi và khoá công thức lại, phòng tránh trường hợp, sữa chữa, thay đổi làm sai kết quả,v.v...., rồi gởi file cho các đơn vị, thành viên nhập liệu theo những yêu cầu. Lúc đó báo cáo sẽ tự động cho ra kết quả, hoặc sau đó người ta làm thao tác xử lý để cho ra kết quả. Việc này mình thấy hoàn toàn hợp lý.
Ví dụ: một file tính giá thành được thiết kế hoàn chỉnh, qua các công đoạn sản xuất, người ta có thể khoá công thức lại, vì nếu ai đó vọc, thay đổi, sữa chữa thì ảnh hưởng rất nghiêm trọng. Sau đó file được share cho các bộ phận nhập số liệu thô vào, như bộ phận theo dõi định mức sản xuất sẽ cập nhật định mức, kế toán nguyên liệu sẽ cập nhật nguyên liệu xuất sử dụng trong tháng, kế toán thành phẩm thì cập nhật lượng thành phẩm nhập kho, v.v....khi đó người tính giá thành chỉ bấm nút cho chương trình chạy, hoặc công thức đã tự tính và họ chỉ kiểm soát, kiểm tra và phân tích chi phí thôi.
Và việc này excel cũng đã có hỗ trợ hoàn toàn rồi, mình không phải dùng vba đâu.
Các bước thực hiện:
(Sorry! do cách diễn đạt các thuật ngữ hơi bị quên "nói thì dễ mà viết khó quá", để mình xem lại rồi viết tiếp sau nhé.)
 
Để cho nhập dữ liệu vào các ô cho phép, bạn thực hiện như sau:
1. Chọn toàn bộ bảng tính (bấm vào góc trên bên trái bảng tính)
2. Vào Format\ cells\ protection bỏ chọn Locked.
3. Chọn vùng có dữ liệu trên bảng tính cần khoá lại, (không cho nhập liệu vào.)
4. Vào Format\ cells\ protection chọn Locked.
5. Vào Tools\ protection\ protect sheet..\ ở khung "Password to unprotect sheet" bạn gõ password hoặc để trống cũng được, ở khung "Allow all users of this worksheet to:" bạn chỉ chọn "Select unlocked cells"
* Vậy là bạn đã khoá vùng không được nhập liệu rồi đó, lúc này người ta có nhập liệu vào các ô bị khoá sẽ không nhập được (và hay là máy sẽ không báo là bảng tính bị protect...) và họ chỉ nhập được vào các ô mình cho phép thôi.
Chúc các bạn ứng dụng tốt cho công việc của mình.
 
Với hieplv3010: cách của bạn ko dc rồi... bạn đọc kỹ yêu cầu đi... Ý bạn ấy là những cell trống sẽ cho nhập liệu... khi nhập xong thì khóa luôn.. Nói tóm lại phải dùng 1 con macro đễ phát hiện dc cell nào còn trống, cell nào đã có dử liệu đễ cho phép hoặc ko cho phép nhập vào những cell ấy! Bạn hiểu ko?
ANH TUẤN
 
Mình đã đọc nhiều bài rồi nhưng vẫn không có cách giải quyết nào thấu đáo hoặc do mình chưa có biết cách làm:
- Có đoạn code không cho nhập nhưng khi mình chọn một vùng dữ liệu nào đó thì có thể xóa hết được (vùng dữ liệu này bao gồm ô có dữ liệu và không có dữ liệu).
- Có đoạn code thì buộc phải nhập password nhưng vẫn mắc lỗi như trên và nó chỉ cho phép nhập từng ô thôi!
Trong phần này ý của mình là:
- Nhập dữ liệu vào những ô trống, không cho nhập vào những ô có dữ liệu, kể cả các thao tác trên cùng dữ liệu.
- Chỉ khi nhập password mới được phép thao tác trên bảng tính (tức là sửa đổi hay nhập mới tất cả các ô trong bảng tính).
 
Chào Sieunhi
Thật sự không hiểu lắm yêu cầu của bạn. Thôi thì bạn tải file mình làm ví dụ. Nếu chưa đúng yêu cầu thì dựa vào đó mình thay đổi hé.

TDN
 

File đính kèm

  • Protect Data Cells V1.zip
    7.7 KB · Đọc: 1,711
Lần chỉnh sửa cuối:
anhtuan1066 đã viết:
Với hieplv3010: cách của bạn ko dc rồi... bạn đọc kỹ yêu cầu đi... Ý bạn ấy là những cell trống sẽ cho nhập liệu... khi nhập xong thì khóa luôn.. Nói tóm lại phải dùng 1 con macro đễ phát hiện dc cell nào còn trống, cell nào đã có dử liệu đễ cho phép hoặc ko cho phép nhập vào những cell ấy! Bạn hiểu ko?
ANH TUẤN
To AnhTuan1066: Cách này là đường hướng đúng đó chứ! Chỉ còn thiếu chút xíu nữa là xong:
Ghi các hoạt động đó thành macro & thực hiện sau mỗi lần nhập vô 1 ô;
Cụ thể như sau:(hướng giải quyết thôi & sẽ cụ thể sau)
Viết vô phần
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
         ... . . 
End Sub
những bước sau:
Mở khóa các ô đã bị khóa = Password;
Dùng lệnh goto để chọn toàn bộ các ô có dữ liệu
Khóa chúng lại = Password
Để làm được ~ điều này đúng là xem bài về Khóa Sheets (trong đó có bài của N&Son nói rất kỹ!!! - đúng như TDN đã nêu)
Tóm tắc: Mở khóa tất cả các ô trong sheets (mặc định excel đã khóa!)
Chép macro NVSơn vô nơi cần thiết!
/)/ếu bạn chưa rõ thì đưa lên 1 file & 1 mã mật khẩu sẽ có người zúp bạn tiếp!
 
sieunhi10079 đã viết:
Trong phần này ý của mình là:
- Nhập dữ liệu vào những ô trống, không cho nhập vào những ô có dữ liệu, kể cả các thao tác trên cùng dữ liệu.
- Chỉ khi nhập password mới được phép thao tác trên bảng tính (tức là sửa đổi hay nhập mới tất cả các ô trong bảng tính).

Cách của mình là thoả mãn ý của sieunhi. - Khoá những ô có dữ liệu, cho nhập vào các ô trống cho phép. - Khi bạn đặt password cho protect sheet.. thì những ai biết pw mới có thể sửa đổi hay nhập mới.
Bạn nói chưa thoả mãn thì không hiểu luôn. Hay bạn muốn nhập đến đâu khoá đến đó, ý này hơi ngộ. Nhưng muốn vậy thì ý của bạn HYEN rất hay, bạn tham khảo thêm. OK nhé!
 
Có lẽ do mình diễn đạt kém quá! Ý của mình là như thế này:
- Chỉ có admin (người biết PW) mới chỉnh sửa được các ô có dữ liệu.
- User chỉ nhập dữ liệu vào những ô trống, không copy, không xóa,....
Trong bài của tedaynui, khi click vào ô có dữ liệu nó đòi PW và khi nhập vào thì chỉnh sửa được ô đó còn các ô có dữ liệu khác thì không được, phải nhập lần nữa. Nói chung là muốn chỉnh sửa ô nào thì nhập PW vào. Điều này rất mất công. Mình muốn admin nhập PW một lần thì chỉnh sửa được tất cả các ô có dữ liệu. Sau khi chỉnh sửa xong thì nhập PW khóa lại.
Rất mong nhận được đóng góp ý kiến!
 
Gởi Sieunhi
Mình đã chỉnh lại và Up lại ở bài #17, bại thử tại lại xem có như ý không nhé !

TDN
 
Hiếu ơi!
Sao khi chọn 1 vùng chưa làm gì cả thì nó báo lỗi code rùi.

TC.
 
Thien đã viết:
Hiếu ơi!
Sao khi chọn 1 vùng chưa làm gì cả thì nó báo lỗi code rùi.

TC.
Mình sửa lại rồi.
Có gì thì cứ thông báo thêm hoặc vào code sửa lại thôi.

Thân!

Làm xong chẳng biết đúng ý chưa, chẳng thấy ai nói gì. Chán !!+-+-+-++-+-+-++-+-+-++-+-+-+

be be be!!!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Mr Okebab đã viết:
Làm xong chẳng biết đúng ý chưa, chẳng thấy ai nói gì. Chán !!+-+-+-++-+-+-++-+-+-++-+-+-+

be be be!!!
:D
Góp ý nhé : khi đã unprotect thì phải cho Admin chọn nhiều ô chứ (Admin mà xoá từng ô luôn thì có mà gãy cổ :D
 
SoiBien đã viết:
:D
Góp ý nhé : khi đã unprotect thì phải cho Admin chọn nhiều ô chứ (Admin mà xoá từng ô luôn thì có mà gãy cổ :D

Thì sửa tiếp vậy. Cảm ơn bác. (có như vậy thì em mới tiến được chứ)

Thân!
 

File đính kèm

  • Protect Data Cells-OB2.xls
    34 KB · Đọc: 363
Mình có ý kiến tiếp nhé, thường thỉ khi nhập liệu, không thể tránh khỏi chuyện sai xót, vậy là không thể sửa sai????

Có nên làm là chỉ sau khi Close (or Save) thì mớu protect lại những cells đã có giá trị (chỉ sợ phải quét qua hết cả Workbook thì hơi lâu)????
 
SoiBien đã viết:
Mình có ý kiến tiếp nhé, thường thỉ khi nhập liệu, không thể tránh khỏi chuyện sai xót, vậy là không thể sửa sai????

Có nên làm là chỉ sau khi Close (or Save) thì mớu protect lại những cells đã có giá trị (chỉ sợ phải quét qua hết cả Workbook thì hơi lâu)????

Việc cho sửa những dữ liệu vừa nhập xong thì không khó gì cả, chỉ có điều là như thế không biết có đúng ý của người hỏi không ????

Tuy nhiên đây là một ý rất hay.
Bác xem nhé :


Thân!
 

File đính kèm

  • Protect Data Cells-OB3.xls
    44.5 KB · Đọc: 505
hình như cái bebe2 nó có vấn đề, chắc nó phải gọi cái thủ tục LockSh2 luôn thì phải, Bạn xem lại xem? như vậy chắc hay hơn ??? vì nếu Protect mà mấy cái cell có dữ liệu, nhưng Not locked thì lại không đúng ý nghĩa Caption của Nút Bebe2.
 
Lần chỉnh sửa cuối:
Status
Không mở trả lời sau này.
Web KT
Back
Top Bottom