Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA对象模块必须实现~?_Vba - Fatal编程技术网

VBA对象模块必须实现~?

VBA对象模块必须实现~?,vba,Vba,我创建了两个类,一个是另一个的接口。每次尝试实例化Transition_模型时,我都会得到: 编译错误:对象模块需要为接口“~”实现“~” 据我所知,实现类应该具有所有公共子类、函数和属性的副本。所以我不明白这里的问题是什么 我见过类似的问题出现,但它们要么是指问题,要么是把答案弄得太复杂,让我无法理解 还请注意,我尝试将Transition_Model的sub改为Private,并在sub name前面添加'IModel_',就像我链接的第二个问题中的顶部答案一样,但我仍然收到相同的错误 伊莫

我创建了两个类,一个是另一个的接口。每次尝试实例化Transition_模型时,我都会得到:

编译错误:对象模块需要为接口“~”实现“~”

据我所知,实现类应该具有所有公共子类、函数和属性的副本。所以我不明白这里的问题是什么

我见过类似的问题出现,但它们要么是指问题,要么是把答案弄得太复杂,让我无法理解

还请注意,我尝试将Transition_Model的sub改为Private,并在sub name前面添加'IModel_',就像我链接的第二个问题中的顶部答案一样,但我仍然收到相同的错误

伊莫代尔

Option Explicit
Public Enum Model_Types
      Transition
      Dummy
End Enum
Property Get M_Type() As Model_Types
End Property
Sub Run(Collat As Collateral)
End Sub
Sub Set_Params(key As String, value As Variant)
End Sub
过渡模型

Option Explicit
Implements IModel
Private Transitions As Collection
Private Loan_States As Integer
Private Sub Class_Initialize()
    Set Transitions = New Collection
End Sub
Public Property Get M_Type() As Model_Types
    M_Type = Transition
End Property
Public Sub Run(Collat As Collateral)
    Dim A_Transition  As Transition
    Dim New_Balance() As Double
    Dim Row           As Integer

    For Row = 1 To UBound(Collat.Curr_Balance)
        For Each A_Transition In Transitions
            If A_Transition.Begining = i Then
                New_Balance = New_Balance + Collat.Curr_Balance(Row) * A_Transition.Probability
            End If
        Next A_Transition
    Next
End Sub
Public Sub Set_Params(key As String, value As Double)
    Dim Split_key(1 To 2) As String
    Dim New_Transition As Transition

    Split_key = Split(key, "->")
    Set New_Transition = New Transition

    With New_Transition
        .Begining = Split_key(1)
        .Ending = Split_key(2)
        .Probability = value
    End With

    Transitions.Add New_Transition, key
End Sub
最后是我用来测试班级的潜艇

Sub Transition_Model()
    Dim Tested_Class As New Transition_Model
    Dim Collat As New Collateral

    'Test is the model type is correct
    Debug.Assert Tested_Class.M_Type = Transition

    'Test if Model without transition indeed does not affect balances of its collateral
    Collat.Curr_Balance(1) = 0.5
    Collat.Curr_Balance(2) = 0.5

    Tested_Class.Run (Collat)

    Debug.Assert ( _
        Collat.Curr_Balance(1) = 0.5 And _
        Collat.Curr_Balance(2) = 0.5)

End Sub

实际上,我链接的第二个问题都有我错过的正确答案

所有潜艇都需要以“IModel_u2;”开头,其余的名字必须与IModel中的名字匹配

这是我遗漏的部分,您不能在子名称中使用下划线