首页 > 解决方案 > 使用 get-Function 将自定义类实例分配给变量

问题描述

我有两节课:

clsDataElement

Public dataA As String
Public dataB As String
Public dataC As String

cls接口

Private mDataElements() As clsDataElement
Private mCountOfDataElements As Integer

Private Sub Class_Initialize()
   mCountOfDataElements = 0
End Sub

Public Sub addDataElement(dataElement As clsDataElement)
   ReDim Preserve mDataElements(mCountOfDataElements)
   Set mDataElements(mCountOfDataElements) = New clsDataElement

   mDataElements(mCountOfDataElements).dataA = dataElement.dataA 
   mDataElements(mCountOfDataElements).dataB = dataElement.dataB 
   mDataElements(mCountOfDataElements).dataC = dataElement.dataC

   mCountOfDataElements = mCountOfDataElements + 1
End Sub

Public Function getDataElement(Optional index As Integer) As clsDataElement
   If Not index >= mCountOfDataElements Then
      getDataElement = mDataElements(index)
   End If
End Function

如您所见,该类clsDataElement只是一些数据的容器。该类clsInterface可以包含多个元素clsDataElement

现在,如果我想从接口类中读取一个数据元素,它就是行不通的。但是,我觉得这与以下事实有关,即我不能只分配自定义类:

Public Sub TestMyClass(myInterface As clsInterface)
    Dim tmpDataElement As New clsDataElement
    Set tmpDataElement = myInterface.getDataElement(0)
End Sub

所以在运行这段代码时我得到了错误

对象变量或未设置块变量

我确保 myInterface 中存储了多个数据元素。你有什么想法我做错了吗?

标签: vbaclass

解决方案


获取元素时是否缺少“Set”关键字:

Public Function getDataElement(Optional index As Integer) As clsDataElement
   If Not index >= mCountOfDataElements Then
      Set getDataElement = mDataElements(index)
   End If
End Function

推荐阅读