首页 > 解决方案 > 调用具有多个参数的子会导致编译错误

问题描述

将两个变量传递给另一个子时,我得到“编译错误:预期:=”。

在前面添加“void =”可以解决问题,但这是最佳实践似乎很奇怪。

不传递参数时使用括号将导致相同的编译错误。

Sub sub1()
    sub2
    sub2 ()
    sub3 ("Hello World!")
    sub4 ("Hello World!", "Hello World! Again!")
End Sub

Sub sub2()
    MsgBox ("Hello World!")
End Sub

Sub sub3(text As String)
    MsgBox (text)
End Sub

Sub sub4(text1 As String, text2 As String)
    MsgBox (text1)
    MsgBox (text2)
End Sub

标签: vba

解决方案


从它们不属于的地方删除括号。

Sub sub1()
   sub2
   sub2
   sub3 "Hello World!"
   sub4 "Hello World!", "Hello World! Again!"
End Sub

Sub sub2()
   MsgBox "Hello World!"
End Sub

Sub sub3(text As String)
   MsgBox text
End Sub

Sub sub4(text1 As String, text2 As String)
   MsgBox text1
   MsgBox text2
End Sub

看看您的示例中,VBA 如何在子例程名称和括号后添加一个空格?

sub2 ()

这是一个提示。正在发生的事情是您提供的两个字符串作为参数首先被评估,从而产生一个参数,然后它尝试将其传递给具有 2 个必需参数的子例程。

返回某些东西的函数需要用括号括起来参数,而子例程不需要(不能)。


推荐阅读