使用类对象作为同一类对象中的参数

时间:2015-04-14 02:10:22

标签: class excel-vba runtime-error parameter-passing custom-type

我在使用名为“Spectrum”的自定义类模块时遇到问题

以下代码行应从频谱“A”中减去频谱“B”,直接修改“A”中的私有变量。

    A.subtract(B)

但是在运行时,我收到“运行时错误'438':对象不支持此属性或方法”

以下是“Spectrum”自定义类模块的子例程:

    Private pYValues(1 TO 10000) as Double
    Private pIndex as Integer

    Public Sub Subtract (Value as Spectrum)
        Dim i as Integer
        For i = 1 to pIndex
            pYValues(i) = pYValues - Value.YValues(i)
        Next i
    End Sub

    Public Property Get YValues(index as Integer)
        YValues = pYValues(index)
    End Property

以下是我尝试从单独模块运行的实际代码片段:

    Sub testArrayLoading()
        ' Create a file dialog object
        Dim fd As FileDialog

        ' Choose destination folder (global resource variable!)
        Set fd = Application.FileDialog(msoFileDialogOpen)
        fd.Show

        ' Create a spectrum object
        Dim mySpectrum1 As Spectrum
        Dim mySpectrum2 As Spectrum
        Set mySpectrum1 = New Spectrum
        Set mySpectrum2 = New Spectrum

        ' Populate each spectrum with data
        mySpectrum1.Import (fd.SelectedItems(1))
        mySpectrum2.Import (fd.SelectedItems(1))

        ' Subtract one spectrum from the other
        mySpectrum1.Subtract (mySpectrum2)
    End Sub

我是否无法将类对象用作同一类中的参数?或者我应该使用属性而不是子例程?

到目前为止,我已尝试使用ByVal和ByRef,并将子例程切换为公共属性集。两者都没有为我工作。我认为我只是缺少一些关于将自定义类对象作为参数传递的理解。

感谢您的帮助,

迈克尔

1 个答案:

答案 0 :(得分:1)

括号。这条线......

mySpectrum1.Subtract (mySpectrum2)

......应该是......

mySpectrum1.Subtract mySpectrum2

...或:

Call mySpectrum1.Subtract(mySpectrum2)

请参阅What does the Call keyword do in VB6