User Sub with Optional parameters - 在Macro窗口中不可见

时间:2016-01-25 19:33:48

标签: excel vba excel-vba udf

我有一个宏,它通过列并从范围内的所有单元格中删除数字。我想添加一个可选参数,所以我可以调用sub,同时告诉它要运行哪些列。这就是我所拥有的:

Sub GEN_USE_Remove_Numbers_from_Columns(Optional myColumns as String)

我可以从另一个子组中调用它,例如GEN_USE_...Columns("A B C")

但是,我无法从VB编辑器中运行它,也无法在宏窗口中看到该宏(单击View - > Macros时)。为什么不?为什么 使用参数调用它(即使GEN_USE_...Columns(""))我不能再调用GEN_USE_...Columns()

seen that您可以在末尾添加= Nothing,如果没有给出,则设置默认值。我已尝试过()但它没有做任何事情。

我想我的问题是A)为什么我在宏窗口中看不到具有可选参数的宏?和B)为什么我不能直接从VB编辑器调用带参数的宏?我必须实际创建一个sub,然后我可以调用该sub中的宏。不再只是突出显示一些文字并点击" Play"。

我知道这两个问题可能是相关的,所以任何见解都会受到赞赏!

(PS:我知道我们应该发布代码,但我并不认为它非常相关。当然,如果你想看到它,请让我知道,我会更新。

2 个答案:

答案 0 :(得分:8)

使用Optional myColumns as Variant在“运行宏”([alt] + [F8])对话框中显示它。或者,将其隐藏起来;您可以键入名称,然后单击“运行”。变体类型也是唯一能够正确响应IsMissing function

的类型
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)中的参数调用sub。

答案 1 :(得分:5)

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

最好的选择是编写一个将出现在宏窗口

中的包装器Sub
Sub USER_Remove_Numbers_from_Columns()
    GEN_USE_Remove_Numbers_from_Columns
End Sub