在一个Excel宏,我已经定义了一个函数想返回记录,像这样VBA为什么我必须将类变量变暗为变体而不是其类型?
Function GetCommissionDataRecordset(doctorCode As String) As ADODB.Recordset
Set GetCommissionDataRecordset = New ADODB.Recordset
.
. ' setup the connection and SQL string...
.
GetCommissionDataRecordset.Open strSQL
end function
,我试图调用函数像这样
sub tester()
'Dim oRecSet As ADODB.Recordset ' this doesn't work, needs to be a variant
Dim oRecSet As Variant
Set oRecSet = GetCommissionDataRecordset("GC")
'Copy Data to Excel'
ActiveSheet.Range("a1").CopyFromRecordset (oRecSet)
end sub
如果tester
子过程我定义oRecSet as ADODB.Recordset
,在执行CopyFromRecordset
时出现运行时错误。
错误消失时,我定义oRecSet
为Variant
。
运行时错误是430 Class does not support Automation or does not support expected interface
。
发生错误时,手表告诉我的oRecSet
类型是Recordset/Recordset
当我使用的变体的方法,观察告诉我的oRecSet
类型为Variant/Object/Recordset
检查对象的属性在观察似乎表明对我来说没有区别。
这是怎么回事?