从VBA中的函数返回对象实例时出错

Chr*_*lli 4 ms-access vba

我正在尝试实例化一个对象并从函数返回它.我正在上课的是我创造的课程.但是,当我尝试将Object设置为从函数返回的内容时,我得到一个错误.我究竟做错了什么?

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
Run Code Online (Sandbox Code Playgroud)

然后在另一个功能......

Dim bmrk As Blah
Set bmrk = CreateBlah("Test", 1, Trim(AString))
Run Code Online (Sandbox Code Playgroud)

我也试过......

Dim bmrk As Object
Set bmrk = CreateBlah("Test", 1, Trim(AString))
Run Code Online (Sandbox Code Playgroud)

我是VBA的新手,谁能告诉我我做错了什么?

Oor*_*ang 12

每次分配对象时需要使用set .这意味着设置返回值以及将返回值分配给变量时.后期限制示例:

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
Run Code Online (Sandbox Code Playgroud)

早期限制示例:

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
Run Code Online (Sandbox Code Playgroud)

  • @JayHaase,我不确定VB,但没有必要在其他PL中将其设置为"nothing".这是一个局部变量(或者更好地称之为指针或引用),并在子例程完成时自动销毁. (2认同)

Ada*_*lph 6

我假设

Dim b As Blah
Set b = New Blah
Run Code Online (Sandbox Code Playgroud)

实际上应该阅读

Dim bkmrk As Blah
Set bkmrk = New Blah
Run Code Online (Sandbox Code Playgroud)

如果是这样,则您缺少 set 关键字。

Set CreateBlah = bkmrk
Run Code Online (Sandbox Code Playgroud)

一旦你解决了这个问题,那么你的消费代码的两个版本都应该可以工作,尽管前者更好,因为你强烈地输入了变量。