2010-02-05 44 views
3

我试图实例化一个对象并将其从函数中返回。我正在使用的课程是我创建的课程。但是,当我尝试设置一个对象,从函数返回时,我得到一个错误。我究竟做错了什么?从VBA中的函数返回对象实例时出错

Function CreateBlah(NAME As String, Count As Integer, val As String) As Blah 
    Dim b As Blah 
    Set b = New Blah 
    bkmrk.Initialize NAME, Count, val 
    MsgBox (bkmrk.NAME) 
    CreateBlah = bkmrk 
End Function 
中其他功能

则...

Dim bmrk As Blah 
Set bmrk = CreateBlah("Test", 1, Trim(AString)) 

我也试过......

Dim bmrk As Object 
Set bmrk = CreateBlah("Test", 1, Trim(AString)) 

我是新来的VBA,任何人都可以告诉我,我什么做错了?

+0

这个问题是非常糟糕的措辞,因为你忽略了你的真实数据类型。虽然由于.Initialize,它看起来像是一个独立的类模块,不清楚你处理的是什么类型的“对象”。包括这些信息会提高你的答案。也就是说,这很明显,正如@AdamRalph在下面指出的那样,函数的最后一行应该是“Set CreateBlah = bkmrk”。这可能不是导致你的问题的原因,但是它是你发布的代码中的一个缺陷(可能与你的原始代码接近也可能不接近)。 – 2010-02-06 01:45:16

+0

给我们一些关于这个错误的细节,你会得到什么? – 2010-02-07 00:09:49

回答

2

我认为

Dim b As Blah 
Set b = New Blah 

实际上应

Dim bkmrk As Blah 
Set bkmrk = New Blah 

如果是这样,你错过了一组关键字。

Set CreateBlah = bkmrk 

一旦修正这个那么你的消费代码两个版本应该工作,虽然前者是更好,因为你是强类型的变量。

9

你需要使用设置一次分配的对象。这意味着设置返回值时以及将返回值分配给变量时。 后期绑定示例:

Public Sub Example() 
    Dim objWrd As Object 
    Set objWrd = GetWord 
    objWrd.Visible = True 
    objWrd.Quit 
End Sub 

Public Function GetWord() As Object 
    Set GetWord = CreateObject("Word.Application") 
End Function 

早期绑定示例:

Public Sub Example() 
    ''//Requires reference to Microsoft Office Word 
    ''//(Tools>References) 
    Dim objWrd As Word.Application 
    Set objWrd = GetWord 
    objWrd.Visible = True 
    objWrd.Quit 
End Sub 

Public Function GetWord() As Word.Application 
    Set GetWord = New Word.Application 
End Function 
+0

在Sub Example()中,您应该有以下语句:在objWrd.Quit语句后面设置objWrd = nothing以防止内存泄漏。 – 2012-05-17 02:23:16

+1

@JayHaase,我不确定VB,但没有必要在其他PL中将其设置为“无”。这是一个局部变量(或称它为指针或引用更好),并在子例程结束时自动销毁。 – meir 2012-05-25 11:46:36

+0

@Meir,根据我的理解,将参考设置为Nothing将加速垃圾收集过程,这对于记录集等昂贵资源非常重要。请参考此问题:http://stackoverflow.com/questions/517006/is-there-a-need-to-set-objects-to-nothing-inside-vba-functions – 2012-05-25 21:03:20