【问题标题】:VBA - Why does this code need the 'CALL' StatementVBA - 为什么这段代码需要'CALL'语句
【发布时间】:2014-10-23 06:41:34
【问题描述】:

我有以下代码正在从网页中收集一些数据。我的问题是为什么代码会像我期望的那样使用“CALL”语句“工作”,但没有它就不能工作......

    Dim matchURL            As String
    Dim FixtureDetailsTab   As HTMLTable

    For Each match In FixtureCollection
        matchURL = match.getMatchURL
    '
    '  Load up the match table
    '
        oXML.Open "GET", matchURL, False
        oXML.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        oXML.send

        Set htmlDoc = New MSHTML.HTMLDocument
        Set htmlBody = htmlDoc.body
        htmlBody.innerHTML = oXML.responseText
    '
    '  And once again look for the elements with class 'engineTable'
    '  (only interested in the first one)
    '
        Set Elements = htmlDoc.getElementsByClassName("engineTable")
        For Each element In Elements
            Set FixtureDetailsTab = element
            Exit For
        Next element

        Call match.addDetails(FixtureDetailsTab)

    Next match

match是一个单独的Class Module中的自定义类,'addDetails'定义如下

    Public Sub addDetails(detailTab As HTMLTable)
        ....
    End Sub

上面的代码有效,但如果我删除调用语句并尝试调用 Sub 如下

    match.addDetails (FixtureDetailsTab)

我收到“运行时错误 13” - 类型不匹配

我很困惑。任何帮助表示赞赏。

谢谢

【问题讨论】:

标签: vba class call


【解决方案1】:

在 VBA 中调用函数/子函数时,有两种选择:

  1. 使用 CALL 并将参数列表括在括号中

     CALL MySub(param1, param2, param3)
    
  2. 或省略 CALL 并省略括号

     MySub param1, param2, param3
    

任何参数都可以是一个表达式,它本身包含或括在括号中:

MySub param1, (param2 + 2), param3

在没有 CALL 的示例中,您传递的是单个参数,它是括在括号中的表达式:

match.addDetails (FixtureDetailsTab)

在 VBA 中,enclosing an object in parentheses will typically return the default property of that object

因此您试图将 FixtureDetailsTab 的默认属性传递给您的方法,从而导致类型不匹配。

如果您添加 CALL 语句,括号将被解释为 CALL 语法的一部分,并且 FixtureDetailsTab 作为参数传递,正如您所期望的那样。

这种迷人的不一致是VB is loved so much 的部分原因。

【讨论】:

  • 完美。感谢乔的非常清楚的解释 - 我不再困惑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-02
  • 1970-01-01
  • 2021-04-21
  • 2017-05-22
  • 2013-03-20
相关资源
最近更新 更多