Надеюсь, что мой ответ все еще помогает, но если вы уже преодолели проблему, было бы замечательно, если бы вы могли пометить это как ответ, если он вам подходит
По сути, вы не должны объявлять RelationshipArray
и RelationshipProductCategory
как Тип , но вместо этого Class Module (на что ссылаются «определяемые пользователем типы в модулях открытых объектов».
Например, щелкните правой кнопкой мыши проект и создайте модуль класса RelationshipArray
и вставьте в него следующие элементы:
Public Revenue As Double
Public ROE As Double
И сделайте то же самое для RelationshipProductCategory
.
Чтобы создатьновый экземпляр класса class, вы должны сделать
dim v as RelationshipArray
set v = new RelationshipArray
То же самое для установки его в элемент массива:
Dim ar(10) as RelationshipArray
Set ar(0) = v
Итак, ваш код должен выглядеть так:
Option Explicit
Function GetRelationshipValues(ByVal Period As Integer, ByRef B As Variant, ByRef A As Variant) As RelationshipProductCategory
Dim rtn As RelationshipProductCategory
Set rtn = New RelationshipProductCategory
rtn.Period = Period
Set rtn.A = A
Set rtn.B = B
Set GetRelationshipValues = rtn
End Function
Function TableValue(rel As String, prodasp As String, attr As String, v1 As Double, v2 As Double) As Double
TableValue = Rnd
End Function
Sub RelationshipIncomeCalculation()
Dim ar(10) as RelationshipProductCategory
Dim A As RelationshipArray
Dim B As RelationshipArray
Set A = New RelationshipArray
Set B = New RelationshipArray
'this table value is analogous to Range("A2") just more robust for my use
A.Revenue = TableValue("RelationShipIncomeInput", "A", "Revenue", 0, 0)
A.ROE = TableValue("RelationShipIncomeInput", "A", "ROE", 0, 0)
B.Revenue = TableValue("RelationShipIncomeInput", "B", "Revenue", 0, 0)
B.ROE = TableValue("RelationShipIncomeInput", "BUSINESS DEPOSITS", "ROE", 0, 0)
Set ar(0) = GetRelationshipValues(0, A, B)
MsgBox "ar(0).A.Revenue = " & ar(0).A.Revenue
End Sub
Я рекомендую вам узнать больше о разнице между типом и модулем класса.По сути, модули классов более полезны для ИМО.