【问题标题】:VBA Excel issue when declaring multiple listobjects with DIM使用 DIM 声明多个列表对象时出现 VBA Excel 问题
【发布时间】:2018-01-15 09:55:38
【问题描述】:

我被一个 VBA 编译错误(ByRef 参数类型不匹配)困扰着我,因为在我的另一个 vba 项目中我做了(看似)相同但没有得到这个错误。所以经过一些试验和错误后,我遇到了真正的问题,也可以解决它,但我不明白为什么......有人可以尝试一下吗?

此代码将导致 ByRef 类型不匹配错误:

Dim qtbl, crtbl, urtbl As ListObject
Set qtbl = qws.ListObjects("Questions")
Set crtbl = crws.ListObjects("CoreResult")
Set urtbl = urws.ListObjects("UserResult")
...
...
' clean the core team and user result tables
Call ResetTable(crtbl)

虽然这段代码可以正常运行:

Dim qtbl As ListObject
Set qtbl = qws.ListObjects("Questions")

Dim crtbl As ListObject
Set crtbl = crws.ListObjects("CoreResult")

Dim urtbl As ListObject
Set urtbl = urws.ListObjects("UserResult")
...
...
' clean the core team and user result tables
Call ResetTable(crtbl)

两种情况下的子程序都是一样的

Sub ResetTable(tbl As ListObject)

    'Delete all table rows except first row
      With tbl.DataBodyRange
        If .Rows.Count > 1 Then
          .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Rows.Delete
        End If
      End With

    'Clear out data from first table row
      tbl.DataBodyRange.Rows(1).ClearContents

End Sub

问题是将所有 Listobjects 放入 DIM 语句的同一行,用逗号分隔。事实证明,编译器(?)只知道这样一个语句中的 LAST 变量,前两个在大多数情况下仍然有效,除了在对子例程的调用中,我得到了错误。这是预期的行为吗?

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    你的线路

    Dim qtbl, crtbl, urtbl As ListObject
    

    没有定义3个ListObjects,它定义qtblcrtblVariant 您可以将 ListObject 分配给 Variant,但是在调用 Sub 时,编译器仍然会看到导致错误的 Variant。

    Dim qtbl As ListObject, crtbl  As ListObject, urtbl As ListObject
    

    改为

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多