Nhờ giúp đỡ chép VBComponent giữa các VBAProject

Liên hệ QC

nghiaphuc

Thành viên gạo cội
Thành viên danh dự
Tham gia
25/9/09
Bài viết
5,729
Được thích
8,854
Giới tính
Nam
Nghề nghiệp
Giáo viên
Chào cả nhà!
Mình có vấn đề này chưa xử lý được: Mình có 2 Workbook A và B có cùng cấu trúc, A là file dùng để dự phòng khi B bị chương trình diệt Virus xóa mất Macro (lúc này VBProject của B hoàn toàn trống rỗng, không có Password), VBAProject của A có Password (ví dụ: "abc"). Bây giờ mình muốn sao chép tất cả VBComponent (Form, Module, ClassModule) trực tiếp từ A sang B theo vị trí tương ứng (giữ nguyên tên), cụ thể là từ Sheet1, ThisWorkbook, Userform1, Module1,... trong A thành Sheet1, ThisWorkbook, Userform1, Module1,... trong B (có khá nhiều VBComponent, nếu Import thủ công thì sẽ không phù hợp). Sau đó khóa VBProject của B với Password như của A ("abc").
Mình đã tham khảo cách Export từ file A sang ổ cứng, sau đó Import vào file B nhưng không khả thi.
Rất mong cả nhà giúp đỡ mình. Mình đang rất cần nó.
Cảm ơn cả nhà nhiều!
 
Lần chỉnh sửa cuối:
Mình có 2 Workbook A và B có cùng cấu trúc, A là file dùng để dự phòng khi B bị chương trình diệt Virus xóa mất Macro (lúc này VBProject của B hoàn toàn trống rỗng, không có Password), VBAProject của A có Password (ví dụ: "abc").
Tuy nhiên dữ liệu trong B vẫn đủ đầy; Sao bạn không tính đến chuyện chép B vô A* nhỉ?
Chuyện này có vẻ như dễ đó bạn!

Chúc thắng lợi --=0 --=0 :-= --=0 --=0
 
Upvote 0
Sao bạn không nghĩ đến trường hợp nén vào (rar hoặc zip). Khi diệt virus nếu quét nhầm thì bung lại.
Hình như BKAV mới không diệt macro nữa hay sao ý
 
Upvote 0
Xin cảm ơn tất cả các bạn đã quan tâm.
Tuy nhiên dữ liệu trong B vẫn đủ đầy; Sao bạn không tính đến chuyện chép B vô A* nhỉ?
Chuyện này có vẻ như dễ đó bạn!

Chúc thắng lợi --=0 --=0 :-= --=0 --=0
=> Mình xin nói rõ hơn một chút: Cụ thể là mình làm một chương trình Quản lý điểm cho cả trường, tức là tất cả các lớp, các môn đều nhập điểm vào file này. File có nhiều Sheet (hơn 20 Sheet). Do mối liên quan giữa địa chỉ các vùng trong các Sheet nên dữ liệu điểm của các lớp không liền kề với nhau và có sử dụng Merge Cells trong các Sheet. Hơn nữa, các vùng nhập điểm còn có Password (mục đích là biết Password mới nhập/sửa điểm được). Do đó việc sao chép dữ liệu từ B vào A có vẻ như không khả thi lắm.
Sao bạn không nghĩ đến trường hợp nén vào (rar hoặc zip). Khi diệt virus nếu quét nhầm thì bung lại.
Hình như BKAV mới không diệt macro nữa hay sao ý
=> Việc này cũng không khả thi trong trường hợp của mình. Tập tin Excel này cần phải để nguyên trạng (không nén) thì mới nhập điểm được. File này được đặt ở 1 máy (ở phòng chuyên môn) và Share qua mạng LAN để giáo viên toàn trường (hơn 50 người) nhập điểm. Do số người dùng nhiều nên khả năng file bị xóa Macro là rất lớn.
Mình cũng đã thử sử dụng XL2EXE. Kết quả là Macro không bị xóa nhưng mỗi lần lưu, chương trình lại tạo ra file Backup. Nếu chỉ sử dụng file trên 1 máy (nơi chứa file) thì mình xử vụ này được còn thông qua mạng LAN thì mình chưa làm được. Bữa trước mình nén thành EXE và để vào máy chuyên môn. Vài hôm sau mình xem lại thấy một rừng file Backup => +-+-+-++-+-+-++-+-+-++-+-+-+
Mình giả lập 1 file như file đính kèm dưới đây. Nhờ cả nhà xem và viết code vào Module MdlKhoiPhuc giúp mình.
Thanks to all!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Liệu có lời giải nào cho bài toán của mình không? Mong các cao thủ ra tay giúp đỡ.
Xin đa tạ!
 
Upvote 0
Liệu có lời giải nào cho bài toán của mình không? Mong các cao thủ ra tay giúp đỡ.
Xin đa tạ!

Cách hay nhất là dùng LockXls để chuyển từ xls sang exe, đảm bảo là không chương trình nào diệt được các macro trong đó đâu.
 
Upvote 0
Upvote 0
Upvote 0
Mình đã dùng phần mềm mà bạn đang nói đến. Bạn có thể thấy bài #33 là của mình đó.

Bạn có thể chuyển về cách này xem sao:

1-Tạo file *.xla chứa các Macro để thực thi, file này đóng vai trò như một chương trình nhỏ. Nén file này thành *.exe và cài vào các máy trạm. Khi chạy file này sẽ chèn vào Excel thêm 01 menu, người dùng thao tác được với file bảng điểm thì phải thông qua menu này với các Form xác nhận Password, thực hiện công việc gì đó..(Không lưu lại file này sau khi nhập liệu)

2- File bảng điểm là file Excel thông thường (không sử dụng Macro trong file này), như vậy khi lưu file này sẽ không tạo ra file Backup.

3-Trong file *.exe nói trên, bạn dùng kỹ thuật Class Module - Wrap đối tượng của Thầy TuanVNUNI để cho phép chọn tên Sheet nào cần thực hiện và được thực hiện gì trong đó (check Password).

Vài gợi ý nhỏ đóng góp với bạn.
 
Upvote 0
Mình giả lập 1 file như file đính kèm dưới đây. Nhờ cả nhà xem và viết code vào Module MdlKhoiPhuc giúp mình.
Thanks to all!

Nếu như bạn vẫn muốn xử lý theo phương án này thì :

- Vấn đề là bạn không truy xuất được đối tượng VBProject.VBComponents.
- Thật ra đó chỉ là vấn đề security để chống virus macro mà thôi.
- Bạn vào Tools / Macro / Security / Trusted Publisher và chọn Trust Access to VisualBasic Project
- Và bạn sẽ truy xuất được đối tượng VBComponents.
- Sau khi chạy chương trình Khoiphục xong thì nhớ bỏ Trust Acc to VB Project để ngừa virus.

--
Để thuận tiện có lẽ ta nên thống nhất trước cách làm:
- Export các Module và Form ra file .bas và .frm trên dĩa.
- Mở file A.xls ra.
- Kiểm tra xem có còn các module và form ở đó không.
- Nếu không thì Import từ các file .bas và .frm vào A.xls.
- Xóa các file .bas và .frm trên dĩa khi nãy.

Xem thêm tại đây:

http://www.giaiphapexcel.com/forum/archive/index.php/t-10583.html

Đoạn lệnh sau để bạn lấy tên của các components:
Sub n()
Dim mm
For Each mm In ThisWorkbook.VBProject.VBComponents
MsgBox mm.CodeModule
Next
End Sub

Hy vọng đã đủ cho bạn.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom