# Ошибка значения при доступе к пользовательской функции в VBA

Код работает нормально, когда я получаю доступ к функции из VBA, однако, когда я вызываю ту же функцию в ячейке Excel (postalcode("23.0776120,72.6538530"), Я получаю ошибку #Value. Мой код:

Function PostalCode(latlng As String) As String

Dim xmlDoc As MSXML2.DOMDocument60
Dim xEmpDetails As MSXML2.IXMLDOMNode
Dim xParent As MSXML2.IXMLDOMNode
Dim xChild As MSXML2.IXMLDOMNode
Dim Col, Row As Integer

Set xmlDoc = New MSXML2.DOMDocument60
xmlDoc.async = False
xmlDoc.validateOnParse = False
' use XML string to create a DOM, on error show error message
If Not xmlDoc.Load("https://maps.googleapis.com/maps/api/geocode/xml?latlng=" & latlng) Then
    Err.Raise xmlDoc.parseError.ErrorCode, , xmlDoc.parseError.reason
End If

Set xEmpDetails = xmlDoc.DocumentElement
Set xParent = xEmpDetails.FirstChild

Row = 1
Col = 1

Dim xmlNodeList As IXMLDOMNodeList

Set xmlNodeList = xmlDoc.SelectNodes("//formatted_address")

 Worksheets("Sheet1").Cells(1, 6).Value = xmlNodeList.Item(0).Text
 Dim xyz As String
 PostalCode = xmlNodeList.Item(0).Text
' PostalCode = "Not Found (try again, you may have done too many too fast)"
MsgBox PostalCode

End Function

Ответы на вопрос(1)

Решение Вопроса

Это задокументированное ограничение пользовательских функций что тыне могу обычно работают или управляют объектами диапазона / рабочего листа в пользовательской функции, вызываемой из рабочего листа. Хотя вы можете выполнять большинство запросов значений / свойств, вы не можете изменить среду:

Пользовательская функция, вызываемая формулой в ячейке листа, не может изменить среду Microsoft Excel. Это означает, что такая функция не может выполнять одно из следующих действий:

Вставьте, удалите или отформатируйте ячейки в электронной таблице.Измените значение другой ячейки.Перемещение, переименование, удаление или добавление листов в рабочую книгу.Измените любые параметры среды, такие как режим расчета или виды экрана.Добавьте имена в рабочую книгу. Установите свойства или выполните большинство методов.

Я подозреваю, что пошаговое выполнение этого кода с помощью клавиши F8 в VBE определит ошибку, возможноWorksheets("Sheet1").Cells(1,6).Value.

Основным обоснованием этого ограничения является предотвращение бесконечных циклов / циклических ссылок.

Есть способы обойти это ограничение.

 Max11 июл. 2016 г., 14:41
Благодаря тонну!! После комментирования "Worksheets (" Sheet1 "). Cells (1,6) .Value" .. я получил результат ..

Ваш ответ на вопрос