HeSanbi
Nam Nhân✨Hiếu Lễ Nghĩa Trí Tín✨
- Tham gia
- 24/2/13
- Bài viết
- 2,843
- Được thích
- 4,628
- Giới tính
- Nam
Hôm nay tôi sẽ chia sẻ cho các bạn phương pháp lập trình VBA cho tệp Office của bạn như Excel, Word, Access, để chính chúng có thể tự động cập nhật và cài đặt phiên bản mới nhất. Mà không cần phải tạo một tệp riêng lẻ để tải và cập nhật.
Phương pháp này nếu các bạn tìm trên mạng thì gần như rất khó tìm thấy. Nếu có tìm được thì sẽ có hướng dẫn tự động nhưng phải qua nhiều bước. Rất rắc rối cho người dùng.
Bài viết này sẽ giúp các bạn tạo một tệp duy nhất, ở đây sẽ ví dụ là tệp Excel chứa mã VBA, và chỉ cần mở và bật macro một lần duy nhất. Còn lại sẽ tự động tìm phiên bản mới qua mạng (API, Cloud) tải về và tự động cài đặt chính chúng.
Tại sao cần có phương pháp này để VBA tự động cập nhật cho chính ứng dụng chứa nó?
Giải pháp tận dụng Win32 API để thực hiện các bước là:
Phương pháp này nếu các bạn tìm trên mạng thì gần như rất khó tìm thấy. Nếu có tìm được thì sẽ có hướng dẫn tự động nhưng phải qua nhiều bước. Rất rắc rối cho người dùng.
Bài viết này sẽ giúp các bạn tạo một tệp duy nhất, ở đây sẽ ví dụ là tệp Excel chứa mã VBA, và chỉ cần mở và bật macro một lần duy nhất. Còn lại sẽ tự động tìm phiên bản mới qua mạng (API, Cloud) tải về và tự động cài đặt chính chúng.
Tại sao cần có phương pháp này để VBA tự động cập nhật cho chính ứng dụng chứa nó?
1. VBA không thể ghi đè tệp Excel đang mở nếu không xử lý mã đúng phương pháp.
2. VBA có thể tự mở chính nó ở phiên ReadOnly và cập nhật ngược lại cho tệp chính tệp đang mở. Tuy nhiên không tách VBA ra khỏi tiến trình chính thì sẽ tự kết thúc tiến trình theo tệp chính nếu đóng tệp chính để cập nhật.
3. Có thể khởi tạo một Excel ở tiến trình mới tuy nhiên sẽ có cửa sổ trên màn hình, nếu ẩn bởi VBA vẫn tạo ra một nhấp nháy rất khó chịu cho người dùng.
4. Nếu không bỏ unlock tệp tải về thì không thể cập nhật để chạy được.
Giải pháp tận dụng Win32 API để thực hiện các bước là:
1. Tiến trình chính chạy http để tìm kiếm phiên bản mới.
2. Nếu có bản mới thì khởi chạy một ứng dụng Excel mới với CreateObject("Excel.Application") và mở tệp chính với ReadOnly.
3. Đăng ký đối tượng Workbook đó vào ROT để tiến trình tách rời khỏi ứng dụng Excel chính, để không bị đóng theo tiến trình chính.
4. Ở tiến trình mới, chạy mã quét lấy phiên bản mới tải về (giải nén, hoặc truy xuất binary).
5. Dùng API Win32 để bỏ unblock tệp đã giải nén để chạy được khi cài đặt vào Excel.
6. Ở tiến trình mới truy cập tất cả các tiến trình Excel để thoát tệp chính, gỡ cài đặt, ghi đè hoặc tạo bản lưu trữ.
7. Mở tệp phiên bản mới ở tất cả các tiến trình Excel. Và thông báo để hoàn thành.
Tiếp theo bài viết sẽ có là hướng dẫn mã VBA và tệp ví dụ....
Lần chỉnh sửa cuối:
