【问题标题】:Using a class object as a parameter within the same class object [closed]在同一个类对象中使用类对象作为参数[关闭]
【发布时间】:2015-04-14 02:10:21
【问题描述】:

我在使用名为“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

这是我尝试从单独的模块运行的代码的实际 sn-p:

    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,并将子例程切换到公共属性集。两者都没有为我工作。我想我只是在将自定义类对象作为参数传递的理解方面遗漏了一些东西。

感谢您的帮助,

迈克尔

【问题讨论】:

    标签: excel vba parameter-passing custom-type


    【解决方案1】:

    括号。这一行……​​

    mySpectrum1.Subtract (mySpectrum2)
    

    ...应该是...

    mySpectrum1.Subtract mySpectrum2
    

    ...或:

    Call mySpectrum1.Subtract(mySpectrum2)
    

    看到What does the Call keyword do in VB6

    【讨论】:

    • 对不起,这太简单了!我仍然习惯于 C# 语法。无论如何,这是我应该作为财产写的东西吗?那我可以叫它mySpectrum1.Subtract(mySpectrum2)吗?只需将其从 Public Sub 切换到 Public Property Set 就会出现错误。无论如何,谢谢!
    • @MichaelMolter 公共属性集仅适用于对象(公共属性 Let 将适用于基元)。此外,您可能不希望它作为一个属性,因为如果它是一个设置器,即mySpectrum1.Subtract = mySpectum2,那么语法会很奇怪,或者相同:mySpectrum1.Subtract(mySpectrum2) 如果您丢弃返回值,或者附加引用分配: mySpectrum1 = mySpectrum1.Subtract(mySpectrum2)。我唯一要更改的是参数名称 - “其他”是更传统的名称。如果您更喜欢mySpectrum1.Subtract(mySpectrum2),请将“呼叫”放在前面。
    猜你喜欢
    • 2018-01-04
    • 2014-10-15
    • 2012-05-29
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 2016-10-14
    • 1970-01-01
    相关资源
    最近更新 更多