简体   繁体   中英

Password-protect the macros of a second workbook from a first using VBA

I have a workbook, which creates a second workbook (using ThisWorkbook.SaveCopyAs ) to present the data nicely to users. It relies on macros for part of the processing.

However, I've been asked to make those macros inaccessible to users. They still need to run them, but to view/edit them should require a password. I can figure out how to do it using the GUI (VBA Editor -> right click VBAProject -> VBAProject Properties -> Protection, tick the box and enter a password), but I haven't found a way to do so using VBA. The Workbook.Protect function seems to lock down everything except VBA.

If I try to apply it to the source workbook, I get "Can't perform operation since the project is protected", so that doesn't work either.

I'm running 2010, but the workbook needs to be compatible with 2003, so no fancy new tricks. :(

此方法描述了不使用sendkey http://www.standards.com/Office/SetVBAProjectPassword.html设置项目密码的方法

I had a similar problem. I needed excel code to populate user created new sheets, but I wanted to password protect the project. It would work great as long as I did not use password proection, but Excel will not allow it to generate code in the new sheets with password protection.

The solution was interesting. Give your project an easy name or initials . Something people can find with ease.

You password protect your entire project and save the resulting file as an XLA (add on).

Then UNprotect the workbook, rename the file (just in case you make a mistake) and strip it of all the code, modules, classes, forms, etc. Save the new stripped Excel File.

Now open the new stripped file and add the xla in TOOLS/add ons. Then go to the VBA editor, References and find your project wiht a new name, and link (you may have to save and reopen once to find under referneces).

That's it. the new file, empty of all code, will operate using the old code but you will have no access to it without a password. At the same time, the old code can place the code on the new worksheets as before since the new workbook Project is not password protected

What I have found is that if you change locations, your users may need to find the link in the references, but I am sure you can create a macro to find and link automatically (that macro, of course, would be visible to the world).

I think this will solve any problem with protected code.

Good luck

This post may be helpful to you. Note that in the comments it says you need to add vbeext1.olb .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM