从“查看macros”屏幕禁用运行macros,直到inputVBA项目密码?

所以首先,当点击“查看macros”button时,popup:

查看宏窗口

我想知道的是,是否有一些代码可以在打开的工作簿上打开(然后在工作簿closures时“运行”),使运行button(如下面的其他button一样)灰显,直到input密码VBA项目(使用Alt + F11打开编辑器)?

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

如果你声明子,所以它需要input,甚至可选的input,它也不会显示在列表中。

 sub Test(optional a as string) 

声明潜艇是私人的,他们不会出现在Alt + F8对话框中。

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

您可以使用vba编辑另一个模块的vba代码。

在Excel VBA中是否可以在另一个模块中更改模块的源代码

您可以更改一行或search行,并注释/取消注释整个代码块。 当vba被解锁时捕获事件可能是困难的部分。 解锁vba后,你可能需要运行一个子程序。

我认为你有这个错误的方法,最好是更正确地构build你的代码。

该工作表上的前两个是从我的主工作表上的button运行的其他macros调用。

好。 所以把这些附加到一个表单控件/button,并使用Bigtree的build议,在这些潜艇包括一个可选的参数。 它们不会显示在macros菜单中。 至less可以用三种方法运行它们:

  • 从VBE中find程序并按F5,或者
  • 通过在VBE中立即窗口中input过程的名称,或
  • 按下你提供的button。

中间的两个被打开和closures时调用

听起来像这应该是一个私人的子程序(或使用Bigtree上面的方法),并从一个或多个适当的事件处理程序(在工作表级可能: Worksheet_ActivateWorksheet_Deactivate ;或在工作簿级别SheetActivateSheetDeactivate根据您的需要)

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

和最后两个我手动调用时,我想编辑我的主表

再次,从即时窗口调用或手动从VBE。 这里只有6个子程序,find你经常需要的子程序并不是那么困难。 把它们放在一个新的模块中,组织你的模块,以便知道它们在哪里。

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

 Sub SheetLock() If Not Environ("username") = "YOUR_USERNAME" Then Exit Sub 'other code to do stuff is below... End Sub 

从评论更新

立即窗口就像一个控制台/命令行,它是你的Debug.Print语句的结果出现的地方等等。这对于debugging和计算expression式非常方便。

在这里输入图像说明

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

  • Application.Run "MacroName"或者只是公开的MacroName
  • Application.Run "ModuleName.MacroName"Call ModuleName.MacroName if private

我不想使用一个私人的子,我用形状的名称,以确定是否从一个button

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

'我手动设置页面布局选项卡select窗格中的形状名称
'下面我testing所需的button如果shapeis =“您的button名称”然后
转到其他地方
goto noshapeselected endif

noshapeselected:msgbox(“必须从一个button运行”)goto theendsub

oktogo:如果select了所需的形状,则继续

theendsub:“一个button没有按下

对于那些没有button但被另一个macros调用的macros,设置一个variables为'OK'来运行一个macros,然后被调用的macrostesting'OK'('OK'意味着由另一个macros'NOK'启动意味着不由另一个macros启动macros)