Một số vấn đề về VBA trong excel (file .xls và .xla)

Nhiều bạn bạn trao đổi các vấn đề như sau, mình tổng hợp, rút gọn và trả lời chung cho các bạn nào có cùng mụch đích, nội dung được tham khảo và sưu tầm từ nhiều nguồn khác nhau, và cũng qua Internet, mình biết nhiều người đang muốn tìm hiểu để làm được điều này.

1. Bảo mật VBA trong file .xls

Hỏi:
1. Làm sao để đặt pass trong VBA nhưng khi mình kích vào thì không hiện hộp thoại nhập Pass Word như thông thường mà hiện thông báo: Project unviewable.
2. Làm thế nào để đặt pass cho các code VBA của file excel để khi mở ra không được vì không có chỗ để gõ pass.
3. Tôi có 1 file excel mà khi mở cửa sổ VBA click vào để hiện mã VBA thì không thấy hiện ô nhập password mà lại hiện dòng thông báo "Project is unviewable". Vậy làm cách nào để truy cập mã VBA và cách tạo ra dòng thông báo đó như thế nào?
Trả lời:
Các câu hỏi có cùng nội dung, và có lẽ các bạn cũng đã tìm trên Google nhưng chưa thấy câu trả lời như mong đợi, sau đây có thể là câu trả lời cho bạn, từ Internet và kinh nghiệm cá nhân.
* Cách tạo ra thông báo: Project unviewable
1. Đặt Pass trong VB:
- Bấm phím Alt +F11 để vào cửa sổ VB Editor,
- Sau đó chọn Tools > VBAProject > Propeties...
- Chọn thẻ Protection,
- Đánh dấu chọn vào Lock Project for Wiewing.
- Gõ Pass vào rồi click OK là xong ...
2. Share Workbook...
- Đóng cửa sổ VB Editor mà bạn vừa đặt Pass xong để trở về màn hình excel,
- Vào menu Tools chọn Share Workbook...
- Đánh dấu chọn vào Alow Changes by.,.
- Click OK, OKOK là xong. Ngay sau đó tên tập tin trên thanh tiêu đề sẽ xuất hiện thêm [Shared] ngay sau tên tập tin.
- Bây giờ bạn thử nhấn At + F11 để mở cửa sổ VBE.
- Trong cửa sổ Project Explorer và nhấp vào tên dự án VBA của bạn để mở code thì bạn sẽ thấy một hộp thông báo Project is unviewable”.
Chú ý: Khi sử dụng chức năng Share Workbook, một số chức năng của Excel bị hạn chế như sau:
- Không xóa, ẩn được Sheet…
Chính vì vậy cần cân nhắc khi sử dụng chức năng này, nên test lại các chức năng của chương trình nếu đặt chế độ bảo mật kiểu này. Ở chế độ Share Workbook, chức năng Protect Sheet vô tác dụng (bị mờ đi), vì vậy cũng dùng cách này để bảo vệ bảng tính. Nhiều chương trình trong Excel hiện nay sử dụng chức năng Share Workbook để bảo mật. Tuy nhiên bảo mật kiểu này hiện nay cũng không còn an toàn nữa.
* Để có thể truy cập (đăng nhập Pass) và xem code VBA:
- Vào menu Tools chọn Share Workbook...
- Bỏ chọn Alow Changes by...
- Click OKYes.
- Bây giờ bạn đóng file excel, chọn Yes để lưu thay đổi.
- Mở lại, nhấn Alt+F11 để mở cửa sổ VBE, nhấp vào tên dự án VBA để mở code thì bạn sẽ thấy một hộp thông báo VBAProject Password yêu cầu nhập Pass.
- Nhập Pass rồi click OK.
Xong.

2. Bảo mật VBA trong file .xla

Hỏi:
Làm sao để xem file *.xla của excel ?
Trả lời:
Thực chất .xla là một file chứa macro (VBA) của excel, cũng có khi có cả dữ liệu. Bạn open file .xla như mở một file bình thường.
Sau khi mở xong, dĩ nhiên là bạn sẽ chẳng thấy gì ráo trọi. Để xem source code của file .xla, bạn nhấn phím : Alt-F11. (hoặc chọn menu : Tools\Macros\Visual Basic Editor)
Trong cái cây hiện ra (thường ở phía bên trái), bạn tìm dòng mà trong ngoặc tròn có chứa tên file .xla mà bạn đã mở thì đó là nơi bắt đầu "nội dung" của file .xla đó.
Chú ý : Có một số file .xla có thể bảo vệ không cho người dùng xem source-code  bằng password. Nếu rơi vào trường hợp này thì... xin chia buồn cùng bạn.
Hỏi:
Làm thế nào để tạo và chỉnh sửa những add-ins *.xla trong excel?
Trả lời:
- Tạo Add-Ins trong excel:
Khi sử dụng bảng tính Excel, chắc bạn không thể không dùng các hàm được định nghĩa sẵn như: SUM; COUNT;…Excel có vài trăm hàm như vậy được chia làm nhiều nhóm theo tính năng khác nhau. Tuy vậy, không phải chúng đã đáp ứng được hết các yêu cầu của người dùng. Nếu thường xuyên cần phải sử dụng các công thức tính tóan phức tạp trong bảng tính của mình, bạn có thể tự xây dựng hàm bằng ngôn ngữ lập trình Visual Basic rồi tập hợp chúng thành một thư viện hàm do người dùng định nghĩa (User-Defined FunctionsLibrary). Sau đó nạp thư viện này vào Excel qua công cụ Add-Ins. Như vậy bạn có thể dùng chúng như các hàm được định nghĩa sẵn trong Excel.
Các bước thực hiện như sau:
1. Khởi động Excel, tạo một bảng tính mới (giả sử tên là Book1.xls). Trong Book1, bạn chỉ cần giữ lại một WorkSheet đầu tiên (xóa bỏ các WorkSheet từ Sheet2 đến hết, việc làm này nhằm thu gọn thư viện nên bạn có thể bỏ qua).
2. Chọn lệnh Tools.Marco.Visual Basic Editor (Alt-F11) để chuyển sang môi trường sọan thảo Visual Basic. Khung Project sẽ liệt kê các thư viện và dự án đang được mở trong Excel, trong đó có Book1.
3. Nhấn chuột vào dòng VBAProject (Book1) để chọn dự án này rồi chọn lệnh Insert. Module để chèn thêm một Module mới vào dự án (Module mới này sẽ có tên là Module1).
4. Nhấn đúp vào Module1 để chuyển sang khung sọan thảo bên phải khung Project. Nhập mã nguồn các hàm của bạn vào khung này. Bạn cần viết chúng theo đúng cú pháp của ngôn ngữ Visual Basic và chú ý không đặt tên hàm của mình trùng với các hàm và từ khóa đã có trong Excel.
5. Chọn lệnh File > Close anh Return to Microsoft Excel (Alt-Q) để quay trở lại Excel. Bạn có thể kiểm tra sự hoạt động của các hàm mới này ngay trong Book1. Nếu vẫn còn sai sót, quay lại thực hiện từ bước 2 để sửa mã nguồn của các hàm.
6. Chọn lệnh File > SaveAs:
- Trong khung Save in, chọn thư mục: MSOffice\Office\Library (thư mục ngầm định chứa các thư viện của Excel).
- Trong khung File Name: Nhập tên tập tin theo ý mình (abc.xla).
- Trong khung Save As type: Chọn Microsft Excel Add-In.
- Nhấn OK để lưu lại thư viện dưới dạng tệp Add-In.
7. Khởi động lại Excel. Chọn lệnh Tools> Add-Ins
8. Trong danh sách Add-Ins available, đánh dấu chọn vào mục có đúng tên thư viện của mình. Nếu chưa có thì bấm Browse ... để dẫn tới thư mục đã save file ở bước 6.
Kể từ đây bạn có thể dùng các hàm mới này như những hàm đã được định nghĩa sẵn trong Excel. Chúng sẽ được liệt kê trong nhóm hàm User Defined. Để sử dụng các hàm này trên máy tính khác, bạn chỉ việc chép tập tin abc.xla vào thư mục MSOffice\Office\Library rồi thực hiện các bước 7,8. Muốn bổ sung các hàm mới vào thư viện, bạn cần nhập thêm mã nguồn vào Module1 của thư viện rồi chọn lệnh File.Save abc.xla để lưu lại.
Để người khác không thể mở và sửa chữa được thư viện của mình, trước khi chọn File. Save, bạn chọn lệnh Tools > VBAProject Properties. Trong hộp thọai Project Properties, nhấp vào mục Protection; đánh dấu chọn Lock Project for Viewing; nhập mật khẩu vào dòng Password; nhập lại mật khẩu lần nữa vào dòng Confirm Password; nhấn OK. Sau này nếu muốn sữa nội dung mã nguồn của thư viện , bạn phải nhập mật khẩu này mới mở được thư viện.
- Chỉnh sửa add-ins *.xla của excel:
Bạn mở file đó lên chọn menu Tools -> Macro -> Visual Basic Editor (hoặc dùng phím tắt Alt+F11). Trong cửa sổ Visual Basic Editor, bạn sẽ thấy ở của sổ Project Explorer (Ctrl+R) các Modules trong add-ins đó, click đúp và mở nó lên, trong của sổ soạn thảo hiện ra, nếu bạn biết các câu lệnh thì có thể chỉnh sửa module đó theo ý mình được.
Hỏi:
1. Làm thế nào để đặt pass trong VBA cho file .xla để khi mở source-code  thì không hiện hộp thoại nhập Pass Word như thông thường mà hiện thông báo: Project unviewable.
2. Làm thế nào để đặt pass cho code VBA của  file xla để khi mở ra không được vì không có chỗ để gõ pass, không thể nhìn thấy gì để có thể xem hay chỉnh sửa source-code?
3. Tôi có 1 file .xla mà khi mở cửa sổ VBA click vào để hiện mã VBA thì không thấy xuất hiện ô nhập password mà thấy hiện dòng thông báo "Project is unviewable".
Cũng không thấy danh sách macro ở khung VBA Projec, hoặc khi bấm Alt+F8?
Vậy làm cách nào để truy cập mã VBA và làm cách nào để tạo ra dòng thông báo đó?
Trả lời:
Để tạo ra dòng thông báo đó, hãy làm theo các bước bên dưới là được:
“Here, I explain the method that worked for me.
Important points to remember before starting: This method is based on the concept of "sharing" an Excel add-in file
It was tried and tested with Excel 8 (97) and Excel 10 (2002)
…”
Mình hiệu chỉnh bản dịch từ tiếng Anh:
Ở đây, tôi giải thích các phương pháp làm việc cho tôi.
Điểm quan trọng cần nhớ trước khi bắt đầu :
Phương pháp này dựa trên khái niệm về "chia sẻ" một tập tin add-in Excel.
Nó đã được thử và thử nghiệm với Excel 8 (97) và Excel 10 (2002)
Giữ lại một bản sao lưu của ban đầu của bạn - file (xls).
Các dự án VBA khóa với phương pháp này sẽ bị khóa vĩnh viễn chống lại xem hoặc chỉnh sửa.
Cách duy nhất để cập nhật mã VBA sẽ chỉnh sửa nó trong bản gốc bảng tính .xls và sau đó tạo ra một tiện ích mới để thay thế cái cũ hoặc bạn sẽ phải tạo một thủ tục VBA trong một bảng tính khác để thực hiện các tiện ích add-in có thể nhìn thấy do đó, nó có thể không chia sẻ.
Kỹ thuật tốt nhất là cũng để bảo vệ dự án VBA của bạn add-in với một mật khẩu
Phương pháp này xuất hiện để khai thác một lỗi trong Excel
Bắt đầu với một bảng tính Excel (.xls) mà bạn muốn chuyển thành một add-in.
Lưu bảng tính này như là một add -in. Sử dụng File > Save As ... sau đó chọn add-in từ "Save As type" danh sách thả xuống.
Đóng bảng tính .xls.
Mở file add-in mới bạn vừa tạo ra.
Mở cửa sổ VBE bằng cách nhấn Alt + F11.
Tìm tập tin add-in của bạn trong cửa sổ Project Explorer và khóa dự án của bạn với một mật khẩu. Hoặc mở nếu mật khẩu đã tồn tại.
Chọn đối tượng "ThisWorkbook" và thiết lập thuộc tính "IsAddin" = False. Điều này sẽ thôi ẩn các sheet trong add-in của bảng tính này, như vậy mới thực hiện được bước kế tiếp dưới đây.
Đóng cửa sổ Visual Basic xla hiện hành để trở về cửa sổ excel (lúc này vẫn đang trên file xla)
Chọn Tools > Share Workbook ... , trên tab Editing, đánh dấu vào ô để chia sẻ bảng tính này. Bấm OK để đóng.
Bấm OK để lưu và chia sẻ bảng tính này.
Nhấn OK để xác nhận thực tế là các macro không thể được xem trong một bảng tính được chia sẻ.
Xác minh [Shared] xuất hiện trên thanh tiêu đề sau tên tập tin.
Lưu bảng tính này một lần nữa bởi add -in. Chọn File> Save As ... , sau đó ta thấy tên tập tin, có đôi mở rộng .xla được đặt trong dấu ngoặc kép (xóa hoặc không xóa dấu ngoặc kép cũng được). Chọn add-in từ "Save as type" danh sách thả xuống .
Nhấn Save, sau đó bấm "Yes để ghi đè lên tập tin hiện có .
Đóng bảng tính này và nhấn "No" để không lưu các thay đổi.
Mở file .xla:
Chọn File .xla (vừa ghi đè) > Open, rồi duyệt để tìm và mở tập tin Add-In mới của bạn. Tiện ích Add-In này sẽ mở giống như bất kỳ file Excel add-in với tất cả các sheet ẩn của nó.
Nhấn Alt+F11 để mở cửa sổ VBE.
Tìm add-in của bạn trong cửa sổ Project Explorer và nhấp vào để mở rộng nó là cây đối tượng.
Bạn sẽ thấy một hộp thông báo có tiêu đề "Dự án đã bị khoá" hiển thị thông báo như sau: "Project is unviewable". Sẽ không có một hộp mật khẩu chỉ có một nút OKTrợ giúp”.
Bạn có thể mở khóa các dự án Add-In VBA bằng cách mở một bảng tính mới và tạo ra một thủ tục VBA để thiết lập thuộc tính của đối tượng IsAddin của ThisWorkbook bằng False và sau đó unshare the add-in workbook (vào menu Tools chọn Share Workbook... , bỏ chọn Alow Changes by... , Click OK và Yes)
Hỏi:
Nếu file excel sau khi ghi thành file .xla và tạo "Project unviewable" mà lại muốn quay lại chỉnh sửa code VBA thì phải làm thế nào?
Trả lời:
Khi tạo file .xla bạn luôn còn lại file gốc .xls, bạn chỉnh sửa trong file .xls này rồi tạo lại file .xla (thay thế file .xla cũ).
Các dự án VBA khóa với phương pháp này sẽ bị khóa vĩnh viễn chống lại xem hoặc chỉnh sửa. Cách duy nhất để cập nhật mã VBA chỉnh sửa nó trong bản gốc file .xls, sau đó tạo ra một tiện ích Add-In mới để thay thế cái cũ.”
Chúc các bạn thực hiện thành công ý định của mình.
Hết!
* * *
Hẹn trong bài viết sau, trong một chuyên mục giới thiệu về các phần mềm thông dụng, mình sẽ tặng các bạn nào có nhu cầu một số phần mềm gọn nhẹ và hữu ích mà mình sư tập được như: PM tạo bộ cài đặt (đóng gói PM), PM học nhạc, chép nhạc; PM dịch từ vựng tiếng Anh; PM camera cho Laptop; PM chép đĩa CD; PM cắt, ghép, chuyển đuôi video; PM tạo file Help…
Những PM này thực ra có thể tìm trên Google nhưng không phải lúc nào bạn cũng tìm đúng bản có Key để cài đặt.

Không có nhận xét nào: