2012-05-14 2 views
3

Я пытаюсь вернуть значение из моего кода. Это гораздо проще просто показать код:Не удается вернуть значение из функции VBA

Function writeHeaderData() As IXMLDOMNode 

    Dim xmlDoc As New MSXML2.DOMDocument30 
    xmlDoc.async = False 
    xmlDoc.LoadXML "<Foo></Foo>" 
    Dim Foo As IXMLDOMNode 
    Set Foo = xmlDoc.DocumentElement 

    'code snip; includes appending lots of things to Foo 

    'the error is on this line: 
    writeHeaderData = Foo 
    Exit Function 

End Function 

Я уже Google искал, но это было ни к чему. Эта функция вызывается из основной подпрограммы, и я пытаюсь добавить возвращенную IXMLDOMNode к большей один, но я получаю сообщение "ошибка "Object variable or With block variable not set на writeHeaderData = Foo линии. Что здесь?

ответ

7

В VB (A), если вы хотите назначить на объекта переменной, включая присвоение возвращаемого значения функции, вам нужно использовать Set, так:

'the error is on this line: 
writeHeaderData = Foo 

должен быть

Set writeHeaderData = Foo 
+0

Отлично! Это очень * необычно, поскольку я подозреваю, что если я верну переменную, которая уже имеет имя, она будет в области/инициализирована. Спасибо, сэр. – chrisdotcode

+0

Переменная writeHeaderData находится в области видимости и инициализирована, но ее объект и VBA говорят, что вам всегда нужно использовать Set для назначения объекту: исключений не допускается. –

+3

Вы собираетесь получить несоответствие типа даже с помощью инструкции Set. Ваша функция возвращает XMLDoc, но Foo - это XMLDOMNode. –

Смежные вопросы