带有可选参数的用户 Sub - 在宏中不可见 window

User Sub with Optional parameters - not visible in Macro window

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

Sub GEN_USE_Remove_Numbers_from_Columns(Optional myColumns as String)

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

但是,我无法从 VB 编辑器中 运行,也无法在宏 Window 中看到该宏(单击查看 --> 宏时)。为什么不?为什么我必须用参数调用它(甚至GEN_USE_...Columns(""))我不能再调用GEN_USE_...Columns()了。

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

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

我知道这两个问题可能相关,所以任何见解都将不胜感激!

(PS: 我知道我们应该 post 编码,但我认为这不是很相关。当然,如果你想看,让我知道了,我会更新)。

带有任何参数(可选与否)的 Sub 不能直接 运行 并且只能从另一个 Sub 或函数调用

最好的选择是编写一个将出现在宏中的包装器 Sub window

Sub USER_Remove_Numbers_from_Columns()
    GEN_USE_Remove_Numbers_from_Columns
End Sub

使用 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

您可以使用 VBE 的即时 window ([ctrl]+G) 中的参数调用子程序。