- Tham gia
- 3/7/07
- Bài viết
- 4,946
- Được thích
- 23,208
- Nghề nghiệp
- Dạy đàn piano
Tôi đang mày mò nghịch VBA, có chỗ này, không biết phải viết làm sao, nhờ các bạn chỉ dùm.
Số là, để bảo vệ dữ liệu ngoài bảng tính không bị xóa bậy, nên tôi đã Proctect Sheet. Nhưng để cho một Form ghi được dữ liệu vào trong Sheet, thì bảng tính đó phải Unprotect, phải không ạ?
Cho nên tôi viết một cái macro để mở Form:
Và trong thủ tục Close Form thì tôi cho nó tự động Proctect Sheet lại:
Chắc tới đây thì không có gì sai phải không ạ.
Khốn nỗi, lỡ như mà, Sheet đó đang ở trạng thái không bị khóa, mà chạy macro ChayForm, thì VBA la làng. Tôi hiểu là tại vì Sheet có Protect đâu mà băt nó Unprotect, nên nó la là phải.
Nhưng làm thế nào để kiểm tra một Sheet có bị Protect hay không?
Ý tôi muốn là, trước khi mở Form, thì kiểm tra xem Sheet1 này có đang bị Protect không. Nếu có, thì chạy tiếp dòng Sheet1.Unprotect, còn nếu như Sheet1 đang "tự do" thì không chạy dòng lệnh đó.
Số là, để bảo vệ dữ liệu ngoài bảng tính không bị xóa bậy, nên tôi đã Proctect Sheet. Nhưng để cho một Form ghi được dữ liệu vào trong Sheet, thì bảng tính đó phải Unprotect, phải không ạ?
Cho nên tôi viết một cái macro để mở Form:
PHP:
Sub OpenForm1()
Sheet1.Unprotect
Form1.Show
End Sub
PHP:
Sub CloseForm1()
Sheet1.Protect
Unload Me
End Sub
Khốn nỗi, lỡ như mà, Sheet đó đang ở trạng thái không bị khóa, mà chạy macro ChayForm, thì VBA la làng. Tôi hiểu là tại vì Sheet có Protect đâu mà băt nó Unprotect, nên nó la là phải.
Nhưng làm thế nào để kiểm tra một Sheet có bị Protect hay không?
Ý tôi muốn là, trước khi mở Form, thì kiểm tra xem Sheet1 này có đang bị Protect không. Nếu có, thì chạy tiếp dòng Sheet1.Unprotect, còn nếu như Sheet1 đang "tự do" thì không chạy dòng lệnh đó.