vba - 在另一个子例程中运行子例程 - 编译错误 : Argument not optional

标签 vba powerpoint

Sub StoreQA(ShapeClicked As Shape)
MsgBox "yeee"
End Sub

Sub ThisIsToBeRun()
StoreQA
End Sub

我收到编译错误:参数不可选。 我尝试提及 StoreQA(ShapeClicked As Shape) 但这也没有帮助。

最佳答案

Argument not optional

您将在此处定义一个名为 ShapeClicked 的参数:

Sub StoreQA(ShapeClicked As Shape)

由于该参数不是可选,因此任何代码都必须为此参数提供参数,以调用此 StoreQA 过程:

' gets the first Shape in Sheet1 (assumes it exists), then passes it to StoreQA:
StoreQA Sheet1.Shapes(1) 

如果不需要该参数,请将其删除:

Sub StoreQA()

如果某些地方需要但其他地方不需要,请考虑将其设为可选:

Sub StoreQA(Optional ByVal ShapeClicked As Shape)

然后您可以合法地调用该过程,而无需提供任何参数:

StoreQA '<~ compiles fine now

可选注意事项

如果StoreQA过程收到Optional参数,则需要在使用它之前验证是否收到有效的对象引用 - 否则会出现问题:

Sub StoreQA(Optional ByVal ShapeClicked As Shape)
    If ShapeClicked Is Nothing Then
        ' argument was not provided *or 'Nothing' was supplied*
        ''Debug.Print ShapeClicked.Name '<~ error 91
    Else
        ' ShapeClicked is holding a valid Shape object reference
        Debug.Print ShapeClicked.Name
    End If
End Sub

如果Optional参数被声明为As Variant(无论是显式还是非显式),那么您可以使用IsMissing函数来验证可选参数是否存在提供 - 当 Nothing 也是一个有效的、有用的接收值时有用(无论如何对于对象引用 - 对于普通值类型,它可以消除使用魔术/硬编码“无效”值的需要):

Sub StoreQA(Optional ByVal ShapeClicked As Variant)
    If IsMissing(ShapeClicked) Then '<~ only valid with an Optional+Variant parameter
        ' argument was not provided
        ''Debug.Print ShapeClicked.Name '<~ error 91
    ElseIf Not ShapedClicked Is Nothing Then
        ' ShapeClicked is holding a valid Shape object reference
        Debug.Print ShapeClicked.Name
    Else
        ' 'Nothing' was explicitly supplied
        '...
    End If
End Sub

关于vba - 在另一个子例程中运行子例程 - 编译错误 : Argument not optional,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61691964/

相关文章:

vba - 如何更新 PowerPoint 幻灯片 (VBA) 中的所有日期/时间值

Delphi - OleContainer - PowerPoint - 自动播放

regex - VBA正则表达式检查特殊符号

vba - 循环遍历我的行,如果 2 个单元格包含任何值,则删除行

vba - Excel-VBA 使用左侧的 vlookup 结果返回

javascript - 如何将 PowerPoint 幻灯片转换为 HTML?

vba - 获取特定字体配置中文本的实际宽度?

python-3.x - Solidworks 宏实现不适用于 Python

vba - 在 powerpoint 中编辑嵌入对象

c# - 如何在 C# 或 Perl 中以编程方式打开 PowerPoint 演示文稿并将其另存为 HTML/JPEG?