我对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
问题是将所有Listobject放入由逗号分隔的DIM语句的同一行。事实证明,编译器(?)只知道这样一个语句中的LAST varibale,前两个仍然适用于大部分,除非在这个子例程调用中,我得到了错误。这是预期的行为吗?
答案 0 :(得分:1)
你的行
Dim qtbl, crtbl, urtbl As ListObject
没有定义3个ListObjects,它将qtbl
和crtbl
定义为Variant
您可以将ListObject
分配给Variant
,但在调用Sub时,编译器仍会看到Variant,从而导致错误。
写
Dim qtbl As ListObject, crtbl As ListObject, urtbl As ListObject
代替