【发布时间】: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 变量,前两个在大多数情况下仍然有效,除了在对子例程的调用中,我得到了错误。这是预期的行为吗?
【问题讨论】: