Примерно так (проверено):
Dim questions As MSXML2.IXMLDOMNodeList, question As MSXML2.IXMLDOMNode
Dim genre
Set questions = oXMLFile.SelectNodes("/catalog/query")
For Each question In questions
genre = ChildValue(question, "genre")
If Len(genre) > 0 Then
With eWorkbook.Sheets(genre).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).EntireRow
.Cells(1).Value = ChildValue(question, "question")
.Cells(2).Value = ChildValue(question, "answer")
.Cells(3).Value = ChildValue(question, "comment")
End With
End If
Next question
Утилита для получения значений дочерних узлов:
Function ChildValue(n As MSXML2.IXMLDOMNode, childName As String)
Dim el, rv
Set el = n.SelectSingleNode(childName)
If Not el Is Nothing Then rv = el.nodeTypedValue
ChildValue = rv
End Function
Это корректно с протестом, что в VB имя функции может также быть переменной, которая возвращается. При предыдущей установке этого на истинный это возвратит true.
Более полностью, в VB.Net, если у меня есть булева функция Foo()
определенный как так:
Public Function Foo() As Boolean
'...
... тело той функции имеет подразумеваемую переменную, также названную Foo
это соответствует типу возврата функции — Boolean
в этом случае, но Object
если тип возврата опущен (необходимо использовать Option Strict
, который требует типа возврата). Эта подразумеваемая переменная инициализируется для использования значения по умолчанию для того типа.
Если Вам не удается Return
значение от функции, ли через Exit Function
или просто путем достижения конца, эта подразумеваемая переменная возвращается вместо этого. Поэтому a Boolean
функция возвратится False
если Вы Exit Function
рано не внося другие изменения, потому что это - значение по умолчанию в подразумеваемой переменной, используемой с функцией. Но Вы могли также установить ту переменную на True
сначала, если Вы хотели, и затем Exit Function
заставил бы это возвращаться True
вместо этого.
В эти дни люди не часто используют подразумеваемую переменную, но существуют ситуации, где она может сохранить Вас несколько строк кода, ничего не стоя в ясности.
Я всегда "Возвращаю True", или "Возвращают False" для выхода из метода вместо оператора выхода.
Независимо, если это делает или не (компилятор дает нулевую ссылку, предупреждающую только), необходимо все еще явно возвратить false, если только для удобочитаемости.
Пока Вы не установили ту функцию на Истинный перед выходом