首先,当点击“查看宏”按钮时,会弹出:
我想知道的是,是否有一些代码可以在工作簿上运行(然后在工作簿关闭时“unrun”),它会使运行按钮(就像其下面的其他按钮一样)直到密码为止在VBA项目中输入(使用Alt + F11打开编辑器)?
我不希望用户能够手动运行任何这些潜艇。
答案 0 :(得分:2)
如果声明sub以便它需要输入,即使是可选输入它也不会显示在列表中。
sub Test(optional a as string)
答案 1 :(得分:1)
将sub声明为private,它们不会显示在Alt + F8对话框中。
将它们声明为公共(默认),它们将会。
答案 2 :(得分:1)
我认为你对此采用了错误的方法,最好更恰当地构建你的代码。
该工作表上的前两个是从其他宏中调用的,这些宏在我的主工作表上使用按钮运行。
行。所以将它们附加到表单控件/按钮,并使用Bigtree的建议在这些subs中包含一个可选参数。它们不会显示在“宏”菜单中。 你可以至少以三种不同的方式运行它们:
当工作表打开和关闭时,会调用中间的两个
听起来这应该是一个私有子程序(或者,使用Bigtree上面的方法)并从一个或多个相应的事件处理程序中调用它们(在工作表级别可能是:Worksheet_Activate
,{{1或者在工作簿级别Worksheet_Deactivate
和SheetActivate
,具体取决于您的需求)
您始终可以从VBE中的“立即”窗口手动运行该过程,也可以手动调用事件过程等。
以及我想要编辑主页时手动调用的最后两个
再次,从立即窗口调用或从VBE手动调用。这里只有6个子程序,找到你经常需要的子程序并不困难。将它们放入一个新模块并组织您的模块,以便您知道它们的位置。
或者,在子例程中添加一些布尔值,如:
SheetDeactivate
评论更新
立即窗口就像一个控制台/命令行,它是Sub SheetLock()
If Not Environ("username") = "YOUR_USERNAME" Then Exit Sub
'other code to do stuff is below...
End Sub
语句的结果出现的地方,等等。它非常便于调试和计算表达式。
有几种方法可以调用子例程,具体取决于它是公共/私有的,包括
Debug.Print
或仅Application.Run "MacroName"
如果公开MacroName
或Application.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'启动意味着不是由另一个宏启动)