隐藏宏(Microsoft Excel)
大多数读者已经知道可以使用VBA创建函数和子例程。这与VBA的名称Visual Basic一样。通常,除非显示以下三个条件之一,否则当您显示“宏”对话框(按Alt + F8)时,宏会显示在宏列表中。
-
宏是一个函数。函数通常返回信息,并且它们要求将信息传递给它们。由于从宏列表运行宏不允许发生以上任何一种情况,因此Excel认为无需将其列出。用户定义的函数在Excel中非常有用,但它们毕竟是函数,因此不会在“宏”对话框中显示。
-
宏是带有参数的子程序。 Excel假定由于参数是必需的,并且您无法通过从宏列表中选择子例程来提供参数,因此无需列出它。
-
子例程已被声明为私有。这意味着子例程仅对在声明该子例程的模块内进行编码有用。
宏对话框中列出的唯一类型的宏是没有参数的非私有子例程。但是,在某些情况下,您可能也不想列出它们。例如,您可能已经创建了一些通用子例程,这些子例程如果单独调用则不会做任何有用的事情。它们旨在从其他代码中调用。例如,考虑以下宏:
Sub MySub() MsgBox "We are running the macro" End Sub
该宏将出现在“宏”对话框中。如果您不希望它出现,则可以采用几种解决方案,通过研究从宏列表中排除宏的三种方式,所有这些解决方案将变得显而易见。第一个潜在的解决方案是检查您的代码,并确定其是否真正“通用”。您是否需要多个模块中的代码?如果不这样做,则将子例程声明为Private;它不会出现在“宏”对话框中。因此,先前的问题宏变为以下内容:
Private Sub MySub() MsgBox "We are running the macro" End Sub
隐藏宏的第二种方法是将其简单地转换为函数。
这听起来可能很奇怪,特别是如果您不想返回任何值,但是这是绝对允许的。在VBA中,函数不必返回值。在没有显式声明返回值的情况下,该函数将返回默认结果(例如,布尔值返回False,字符串返回“”等。)因此,可以将问题过程更改为函数并按如下所示进行声明:
Function MySub() As Boolean MsgBox "We are running the macro" End Function
此过程不会显示在“宏”对话框中,并且不需要参数。默认情况下,它返回False,但是可以忽略此结果。根据您要更改的子例程的性质,真正地使转换后的函数返回True或False可能对您有利,这取决于代码中执行的操作是否成功。在这种情况下,转换后的函数是一个实函数,而不是真正的伪子例程,因为它返回的是有价值的东西。
第三种可能的解决方案是在子例程中使用一些虚拟参数。您不需要在子例程本身中对它们执行任何操作,但是通过包含它们,该过程不会在宏列表中列出。在这种情况下,问题子例程更改为如下所示:
Sub MySub(Void As Integer) MsgBox "We are running the macro" End Sub
现在,该过程未在宏列表中列出,但是您需要更改子例程的调用方式。您必须修改每个实例,以便即使从未使用过参数也可以通过。
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(9904)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。您可以在此处为Excel的较早菜单界面找到此技巧的版本:
链接:/ excel-Hiding_Macros [隐藏宏]。