Import module mới thay cho module cũ với vbaproject có pass

Liên hệ QC

phuoclocvl

Thành viên thường trực
Tham gia
28/3/12
Bài viết
220
Được thích
32
Chào các Anh Chị,
Xin giúp em vấn đề này, mình có code nào import một module mới trùng tên với module cũ và thay thế module cũ (replace) nhưng Vba project có cài password.
Xin cảm ơn ạ,
 
Không thể trừ khi bạn mở khoá và xoá Module cũ trước
 
Upvote 0
bạn thử thì biết được hay không mình chỉ nêu nguyên lí làm việc là như vậy !
 
Upvote 0
Xin giúp em vấn đề này, mình có code nào import một module mới trùng tên với module cũ và thay thế module cũ (replace) nhưng Vba project có cài password.

Đọc yêu cầu có vẻ giống như bạn đang muốn cập nhật ứng dụng Excel mà bạn đã phân phối phải không? Cài password giao file cho người dùng cuối.
 
Upvote 0
Đổi tên module cũ trước khi import module mới.
 
Upvote 0
Dạ, gần như vâỵ ạ. Xin chỉ giáo. Cảm ơn anh,

:) Thực ra là tôi chưa trải nghiệm cái vụ phân phối ứng dụng bằng Excel và tung ra các bản nâng cấp của nó sau đó.
Vì ứng dụng Excel không có tách được dữ liệu ra riêng và ứng dụng giao diện người dùng riêng nên việc tung các bản cập nhật sẽ gặp khó khăn trong việc chuyển dữ liệu đang sử dụng sang file mới.
Theo tôi nếu bạn thiết kế CSDL kỹ lưỡng, chuẩn hoá, dữ liệu lưu trong các sheet riêng thì có thể dùng cách copy (viết code để đồng bộ) các dữ liệu gốc này sang file mới và chạy thôi. Một chú ý quan trọng là bản nâng cấp không đụng gì tới việc thay đổi cấu trúc, thiết kế bảng dữ liệu (không thêm cột, thay đổi thứ tự cột v.v..).
Một số ý kiến cá nhân là vậy, để các bạn chuyên về ứng dụng trên nền Excel góp ý thêm nhé.
 
Upvote 0
:) Thực ra là tôi chưa trải nghiệm cái vụ phân phối ứng dụng bằng Excel và tung ra các bản nâng cấp của nó sau đó.
Vì ứng dụng Excel không có tách được dữ liệu ra riêng và ứng dụng giao diện người dùng riêng nên việc tung các bản cập nhật sẽ gặp khó khăn trong việc chuyển dữ liệu đang sử dụng sang file mới.
Theo tôi nếu bạn thiết kế CSDL kỹ lưỡng, chuẩn hoá, dữ liệu lưu trong các sheet riêng thì có thể dùng cách copy (viết code để đồng bộ) các dữ liệu gốc này sang file mới và chạy thôi. Một chú ý quan trọng là bản nâng cấp không đụng gì tới việc thay đổi cấu trúc, thiết kế bảng dữ liệu (không thêm cột, thay đổi thứ tự cột v.v..).
Một số ý kiến cá nhân là vậy, để các bạn chuyên về ứng dụng trên nền Excel góp ý thêm nhé.
Mình cũng có thiết kế 1 file tự cập nhật khi có phiên bản mới
Do sử dụng bảo mật trên cty nên có lẽ bạn phải chỉnh sửa một chút. ah thôi nói nôm na cho bạn như vậy
Cách mình làm là: Tạo ra 3 file như sau ( File macro1(ng ta sẽ sử dụng), file macro2 (là file gốc của bạn), file Data)
Liên kết file macro của bạn với file data.
Chương trình sẽ chạy như sau:
Khi mởi file macro1 sẽ mở thêm file data.
sau đó kiểm tra phiên bản. nếu ok thì tắt file data và mở file macro1. ngược lại thì thiện thông báo yêu cầu update.
khi nhấn update thì file macro1 sẽ mở file macro2 và lấy toàn bộ dữ liệu từ macro1 chuyển qua macro2.
cuối cùng là save as macro2 với tên của macro1 + thêm số phiên bản tiếp theo là đóng và xóa macro1.
xong!!!
 
Upvote 0
Cách mình làm là: Tạo ra 3 file như sau ( File macro1(ng ta sẽ sử dụng), file macro2 (là file gốc của bạn), file Data)
Liên kết file macro của bạn với file data.
Chương trình sẽ chạy như sau:
Khi mởi file macro1 sẽ mở thêm file data.
sau đó kiểm tra phiên bản. nếu ok thì tắt file data và mở file macro1. ngược lại thì thiện thông báo yêu cầu update.
khi nhấn update thì file macro1 sẽ mở file macro2 và lấy toàn bộ dữ liệu từ macro1 chuyển qua macro2.
cuối cùng là save as macro2 với tên của macro1 + thêm số phiên bản tiếp theo là đóng và xóa macro1.
xong!!!

Vậy file Data như là file thông báo có phiên bản mới cần cập nhật và file Data này bạn lưu trên hệ thống (Shared Folder ) để file Macro 1 khởi động là truy cập vô Data để kiểm tra thông tin? Việc lưu hay copy 2 file: Data và macro2 như thế nào tôi chưa hiểu lắm, đại khái là cái qui trình nâng cấp đó?
 
Upvote 0
Mình cũng có thiết kế 1 file tự cập nhật khi có phiên bản mới
Do sử dụng bảo mật trên cty nên có lẽ bạn phải chỉnh sửa một chút. ah thôi nói nôm na cho bạn như vậy
Cách mình làm là: Tạo ra 3 file như sau ( File macro1(ng ta sẽ sử dụng), file macro2 (là file gốc của bạn), file Data)
Liên kết file macro của bạn với file data.
Chương trình sẽ chạy như sau:
Khi mởi file macro1 sẽ mở thêm file data.
sau đó kiểm tra phiên bản. nếu ok thì tắt file data và mở file macro1. ngược lại thì thiện thông báo yêu cầu update.
khi nhấn update thì file macro1 sẽ mở file macro2 và lấy toàn bộ dữ liệu từ macro1 chuyển qua macro2.
cuối cùng là save as macro2 với tên của macro1 + thêm số phiên bản tiếp theo là đóng và xóa macro1.
xong!!!
Thật ra giờ mình cũng không hình dung ra cách làm như thế nào nữa
 
Upvote 0
Tôi cũng từng viết code để cập nhật Add-Ins. Cách là thế này, 1 File Add-Ins có tên A (File này là các tiện ích để sử dụng), file thứ 2 là B. Từ file A cho chạy đoạn code lấy dữ liệu từ Web về (Thật ra chỉ là file txt được lưu trên Google Driver, đọc nó để biết có phiên bản mới hay chưa) để kiểm tra phiên bản. Nếu đã có phiên bản mới thì lúc đó sẽ gọi file B, khi file B được mở nó sẽ chạy đoạn code gỡ bỏ Add-Ins A (Mục đích là tắt file A đê cập nhật không bị lỗi), tải File A mới (File này cũng lưu trên Google Driver) về và lưu vào thư mục tạm của máy tính. nếu tải về thành công xóa File A cũ đi và Copy file A mới từ thư mục tạm vào vị trí của file A cũ, đăng ký lại Add-Ins A với Excel thông báo thành công và sau đó đóng file B. Nếu tải về không thành công thì đăng ký Add-Ins A lại (Đây là file A cũ) như ban đâu, thông báo cập nhật thất bại và đóng file B lại.
Cách này tôi đã làm thành công, nhưng khi áp dụng vào thực tế thì bị lỗi thế này vẫn chưa khắc phục được. nếu File Add-Ins A nằm ở thư mục nào đó không phải ổ đĩa hệ thống thì chạy ngon lành, nhưng cái Add-Ins của tôi cài vào C:\Program Files\... thì lúc đó nó không cho phép copy file A từ thư mục tạm vào đường dẫn này. Nói túm lại hiện tại vẫn chưa biết cách khắc phục, sẳn tiện thành viên nào có cách hay chỉ giáo với.
 
Upvote 0
@giaiphap Em đoán là thư mục tại C\Program FIles\ là thư mục đòi hỏi Permission trước khi truy cập vào folder trong đó.
 
Upvote 0
Vậy file Data như là file thông báo có phiên bản mới cần cập nhật và file Data này bạn lưu trên hệ thống (Shared Folder ) để file Macro 1 khởi động là truy cập vô Data để kiểm tra thông tin? Việc lưu hay copy 2 file: Data và macro2 như thế nào tôi chưa hiểu lắm, đại khái là cái qui trình nâng cấp đó?
Trong hệ thống này mình đã cắt khá nhiều code. không phải bảo mật nên chia sẻ về cách update của mình nhé.
Yêu cầu sử dụng office 2010 trở lên.
Đầu tiên các bạn tải thư mục này "Data Update Revision" về sau đó giải nén ra.
có 3 file như mình nói:
1. "File ng khac su dung" File này là file bạn sẽ nhân ra cho ng ta sử dụng (đang ở phiên bản 2.0.17) file này các bạn có thể đổi tên.
2. "Member_Data" File này chứa giá trị 2.0.18 => là file quản lý phiên bản, data người dùng. không được đổi tên
3. "TH-BOM-MAU" Là file gốc bạn sẽ nâng cấp. không được đổi tên

giải nén xong bạn mở file "File ng khac su dung" lên là code sẽ chạy. mình mở khóa sẵn rồi nha.
còn đối với file "Member_Data" thì không có code đâu nên các bạn không cần xem gì đâu.
thắc mắc gì cứ hú mình nhé. nếu có time mình sẽ phản hồi.

Ah thêm nữa trong hệ thống này cũng cố một số code mình chưa xóa. các bạn có thể lấy tham khỏa nha. khá nhiều code hay đấy. :)
 

File đính kèm

  • Data Update Revision.zip
    667.1 KB · Đọc: 27
Upvote 0
nếu File Add-Ins A nằm ở thư mục nào đó không phải ổ đĩa hệ thống thì chạy ngon lành, nhưng cái Add-Ins của tôi cài vào C:\Program Files\... thì lúc đó nó không cho phép copy file A từ thư mục tạm vào đường dẫn này. Nói túm lại hiện tại vẫn chưa biết cách khắc phục, sẳn tiện thành viên nào có cách hay chỉ giáo với.

Có cách này: bạn hiện thông báo "nếu muốn cập nhật thành công vui lòng bật UAC về mức MIN rồi bấm cập nhật". :)
Hoặc chạy bằng CMD với quyền Administrator: ShellExecute
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
làm vậy cho nó đơn giản nè thử trong ổ C ý chỗ nào mà nó cho tạo File mà ko có thông báo Continue ý thì cho nó vào đó mà lách cái UAC đi cho gọn ... xong copy Files vào đó xong Add nó vào là xong
hay lách trên Ổ C tạo 1 Folder xong copy files vào đó xong muốn làm chi tiếp thì làm
 
Upvote 0
giải nén xong bạn mở file "File ng khac su dung" lên là code sẽ chạy. mình mở khóa sẵn rồi nha.
còn đối với file "Member_Data" thì không có code đâu nên các bạn không cần xem gì đâu.
thắc mắc gì cứ hú mình nhé. nếu có time mình sẽ phản hồi.

Ah thêm nữa trong hệ thống này cũng cố một số code mình chưa xóa. các bạn có thể lấy tham khỏa nha. khá nhiều code hay đấy. :)

Mở 2 file: nguoi khac su dung và BOM mau không được bạn à. Nó pop up màn hình Toshiba khi chọn Close là thoát luôn.

Screen Shot 2020-08-06 at 2.20.59 PM.png
 
Upvote 0
Web KT
Back
Top Bottom