具有可选参数的用户子集 – 在macros窗口中不可见

我有一个macros通过列(S),并删除范围内的所有单元格的数字。 我想添加一个可选的参数,所以我可以在告诉它在哪个列上运行的时候调用它。 这是我有:

Sub GEN_USE_Remove_Numbers_from_Columns(Optional myColumns as String)

这个想法是我可以从另一个子调用它,像这样GEN_USE_...Columns("ABC")

但是,我不能从VB编辑器运行,也不能在macros窗口(当点击查看 – >macros)时看到这个macros。 为什么不? 为什么我必须调用它的参数(甚至GEN_USE_...Columns("") )我不能只是调用GEN_USE_...Columns()了。

我已经看到,你可以添加= Nothing到最后,设置一个默认值,如果没有给出。 我试过(),但它没有做任何事情。

我想我的问题是A)如何在macros窗口中看不到具有可选参数的macros? 和B)为什么我不能直接从VB编辑器调用macros的参数? 我必须实际创build一个子,然后我可以调用该子内的macros。 没有更多的只是突出一些文字,并打“播放”。

我知道这两个问题可能是相关的,所以任何有识之士将不胜感激!

(PS:我知道我们应该发布代码,但我不认为这是相关的,当然,如果你想看,请告诉我,我会更新)。

使用Optional myColumns as Variant在Run Macro([alt] + [F8])对话框中显示它。 或者,把它隐藏起来; 您可以键入名称并单击运行。 变体types也是唯一对IsMissing函数做出正确响应的types。

 Sub GEN_USE_Remove_Numbers_from_Columns(Optional myColumns As Variant) If IsMissing(myColumns) Then myColumns = Intersect(Selection.Parent.UsedRange, Selection).Address '.address 'cause you were using a string End If Debug.Print Range(myColumns).Address(external:=True) End Sub 

optional_ismissing

您可以使用VBE的立即窗口([ctrl] + G)中的参数调用该子。

具有ANY参数的Sub(可选或不可)不能直接运行,只能从另一个Sub或Function调用

最好的select是编写一个将出现在macros窗口中的包装Sub

 Sub USER_Remove_Numbers_from_Columns() GEN_USE_Remove_Numbers_from_Columns End Sub