Ошибка возврата экземпляра объекта из функции в VBA - PullRequest
2 голосов
/ 05 февраля 2010

Я пытаюсь создать экземпляр объекта и вернуть его из функции. Класс, с которым я работаю, тот, который я создал. Однако, когда я пытаюсь установить объект на то, что было возвращено из функции, я получаю сообщение об ошибке. Что я делаю не так?

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, может кто-нибудь сказать мне, что я делаю неправильно?

Ответы [ 2 ]

10 голосов
/ 09 февраля 2010

Вам нужно использовать 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

Пример раннего связывания:

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
2 голосов
/ 05 февраля 2010

Я предполагаю, что

Dim b As Blah
Set b = New Blah

должно на самом деле читать

Dim bkmrk As Blah
Set bkmrk = New Blah

если это так, вам не хватает установленного ключевого слова.

Set CreateBlah = bkmrk

Как только вы исправите это, обе версии вашего потребляющего кода должны работать, хотя первая лучше, так как вы строго печатаете переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...