从“查看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_Activate
, Worksheet_Deactivate
;或在工作簿级别SheetActivate
和SheetDeactivate
根据您的需要)
您可以始终从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)