禁用从“查看宏”屏幕运行宏,直到输入VBA项目密码?

时间:2014-01-31 15:37:39

标签: excel vba excel-vba

首先,当点击“查看宏”按钮时,会弹出:

View Macros window

我想知道的是,是否有一些代码可以在工作簿上运行(然后在工作簿关闭时“unrun”),它会使运行按钮(就像其下面的其他按钮一样)直到密码为止在VBA项目中输入(使用Alt + F11打开编辑器)?

我不希望用户能够手动运行任何这些潜艇。

5 个答案:

答案 0 :(得分:2)

如果声明sub以便它需要输入,即使是可选输入它也不会显示在列表中。

sub Test(optional a as string)

答案 1 :(得分:1)

将sub声明为private,它们不会显示在Alt + F8对话框中。

将它们声明为公共(默认),它们将会。

答案 2 :(得分:1)

我认为你对此采用了错误的方法,最好更恰当地构建你的代码。

  

该工作表上的前两个是从其他宏中调用的,这些宏在我的主工作表上使用按钮运行。

行。所以将它们附加到表单控件/按钮,并使用Bigtree的建议在这些subs中包含一个可选参数。它们不会显示在“宏”菜单中。 可以至少以三种不同的方式运行它们:

  • 通过查找程序并按F5或
  • 从VBE中获取
  • 通过在VBE的立即窗口中输入过程的名称,或
  • 按下您提供的按钮。
  

当工作表打开和关闭时,会调用中间的两个

听起来这应该是一个私有子程序(或者,使用Bigtree上面的方法)并从一个或多个相应的事件处理程序中调用它们(在工作表级别可能是:Worksheet_Activate,{{1或者在工作簿级别Worksheet_DeactivateSheetActivate,具体取决于您的需求)

您始终可以从VBE中的“立即”窗口手动运行该过程,也可以手动调用事件过程等。

  

以及我想要编辑主页时手动调用的最后两个

再次,从立即窗口调用或从VBE手动调用。这里只有6个子程序,找到你经常需要的子程序并不困难。将它们放入一个新模块并组织您的模块,以便您知道它们的位置。

或者,在子例程中添加一些布尔值,如:

SheetDeactivate

评论更新

立即窗口就像一个控制台/命令行,它是Sub SheetLock() If Not Environ("username") = "YOUR_USERNAME" Then Exit Sub 'other code to do stuff is below... End Sub 语句的结果出现的地方,等等。它非常便于调试和计算表达式。

enter image description here

有几种方法可以调用子例程,具体取决于它是公共/私有的,包括

  • Debug.Print或仅Application.Run "MacroName"如果公开
  • MacroNameApplication.Run "ModuleName.MacroName" if private

答案 3 :(得分:1)

您可以使用vba编辑其他模块的vba代码。

Is it possible in Excel VBA to change the source code of Module in another Module

您可以更改一行或搜索这些行并注释/取消注释整个代码块。在vba解锁时捕获事件可能是困难的部分。在解锁vba之后,您可能必须运行一个执行此操作的子程序。

答案 4 :(得分:0)

我不想使用私人子, 我使用形状名称来确定是否来自按钮

On Error GoTo noshapeselected    shapeis = ActiveSheet.Shapes(Application.Caller).Name

'我在页面布局选项卡选择窗格中手动设置形状名称  '下面我测试所需的按钮     如果shapeis =“您的按钮名称”,则为        转到oktogo     否则
       goto noshapeselected     ENDIF

noshapeselected:        msgbox(“必须从按钮运行”)        转到theendsub

oktogo:'如果选择了所需的形状,则继续

theendsub:'没有按下按钮

对于那些没有按钮但是被另一个宏调用的宏, 将变量设置为'OK'以运行宏,然后被调用的宏测试'OK'('OK'表示由另一个宏'NOK'启动意味着不是由另一个宏启动)