首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果不输入VBA密码,宏/ VBA将无法运行

如果不输入VBA密码,宏/ VBA将无法运行
EN

Stack Overflow用户
提问于 2014-07-18 16:50:47
回答 2查看 1.5K关注 0票数 3

我有一个带密码保护(防止未经授权访问宏)的VBA宏,它可以按预期运行。用户单击按钮,宏将运行。内容或多或少如下:

代码语言:javascript
复制
   Sub sample()
   ActiveSheet.Unprotect Password:="xyz"
   ...VBA code....etc
   ActiveSheet.Protect Password:="xyz", DrawingObjects:=True, Contents:=True,        cenarios:=True
  End Sub

现在我已经添加了一个函数,因此代码如下所示:

代码语言:javascript
复制
Function 
......etc
End Function

Sub sample()
ActiveSheet.Unprotect Password:="xyz"
...VBA code....etc
code referencing the function
ActiveSheet.Protect Password:="xyz", DrawingObjects:=True, Contents:=True,  Scenarios:=True
End sub

如果打开工作簿并打开VBA窗口并输入VBA密码,则宏每次都可以正常运行。工作表密码访问工作正常。

但是,如果我以无权访问VBA代码的用户身份重新打开工作簿,则在输入VBA密码之前,宏不会运行。我猜原因是函数在子例程的“外部”,但是放在子例程内不允许宏运行。我不希望用户访问VBA代码,他们只需要运行宏即可。

期待一个简单的答案!

EN

回答 2

Stack Overflow用户

发布于 2014-07-18 17:16:48

我没有很好地理解这一点,但有两点:

1./如果您想要使用密码保护所有代码(如果还没有这样做):

在vba编辑器中:

工具> VBAProject属性>保护

2./然后,当您使用以下命令时,sample()会为用户(没有密码)和代码锁定工作表:

代码语言:javascript
复制
ActiveSheet.Protect Password:="xyz", DrawingObjects:=True, Contents:=True,  Scenarios:=True

如果你想让你的代码不受限制地访问工作表,但你又想让工作表受到密码的保护(防止用户访问),你可以使用:

代码语言:javascript
复制
UserInterFaceOnly:=True

就像这样:

代码语言:javascript
复制
ActiveSheet.Protect Password:="xyz", DrawingObjects:=True, _
    Contents:=True,  Scenarios:=True, UserInterFaceOnly:=True

因此,您的代码可以访问所有内容,但用户仍需要密码才能编辑工作表。

我不知道这是不是你需要的,我希望如此。如果不是,你可以考虑稍微修改一下你的问题

票数 0
EN

Stack Overflow用户

发布于 2014-07-19 07:40:52

不确定你想通过保护/取消保护你的代码来达到什么目的。就我个人而言,我认为你看错了。

在我的公司,我们有一套广泛的VBA插件(.xla和.xlam),它们是受密码保护的(为了安全和防止篡改,甚至还进行了数字签名)。它们中的许多都相互引用,试图将它们构建为“剪贴板插件”、“通用工具插件”等,以保持其大小和功能的分离。在本例中,通用utils外接程序保持对剪贴板外接程序的引用,以便从剪贴板外接程序调用"Public“函数(您不能跨模块或从工作簿调用Private例程)。

只有我们知道插件的密码,但是客户端可以毫无问题地调用"Public“函数和subs,就像我们在插件之间调用这些函数和subs一样。我们在插件模块中也有一组庞大的“私有”例程,但这没问题,因为它们只在内部使用。

我们还提供了一组工作簿,这些工作簿通过引用多个也受保护的外接程序来利用这些外接程序。但是,用户可以使用所有功能,我们甚至有一个不受保护的VBA外接程序来托管我们的VBA API --映射到受保护代码中的一层薄薄的公共例程。

客户端不需要知道插件内部发生了什么。他们唯一需要知道的就是我们提供的公开可用的API外接程序,他们可以使用它来自动化各种事情。

我知道这可能不是你想要的答案。我只是提供了一个希望有用的替代方法,你可能会考虑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24820902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档