Ответ Алейнса лежит в основе вашей проблемы, но не доходит до конца.
Возможно, вам нужно вспомнить, что строка типа DisplayNode = xNode.Text
просто говорит VBA, что возвращать при выходе из функции, но на самом деле не выходит из функции. VBA с радостью позволит вам назначить и переназначить возвращаемое значение и просто вернет все, что вы сказали, до последнего.
Кроме того, если вы никогда не назначите значение функции, VBA будет предполагать, что вы хотите вернуть значение по умолчанию независимо от типа функции. В вашем случае ваша функция имеет тип Variant
, а значение по умолчанию Variant
равно Empty
. Вы можете видеть это как ноль, потому что VBA неявно преобразует Empty
в ноль во всех ситуациях
Имея это в виду, подумайте, что происходит в вашем примере, если какое-либо из них верно:
1) в вашем параметре Nodes
ничего нет (т. Е. Это пустой массив или коллекция или что-то еще в MSXML)
2) есть некоторые узлы, но ни один из них не соответствует ни одному из тестов в вашем цикле
3) есть несколько узлов, и последний узел удовлетворяет (1) или (2) выше
Вы должны увидеть, что ваша функция вернет Empty
, даже если она обнаружит один или несколько узлов "LastTradePriceOnly" на своем пути через ваше дерево узлов. И тогда вы увидите это как ноль, когда отобразите его в окне сообщения.
Звучит так, будто вы действительно хотите более конкретную подпрограмму - может быть, что-то, что находит определенный узел в дереве и выдает ошибку, если не может этого сделать. Я полагаю, это зависит от ваших данных, но это объяснение должно ответить на ваш непосредственный вопрос о том, почему вы могли видеть ноль в окне сообщения.