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

excel vba

1632 просмотра

1 ответ

Код работает нормально, когда я получаю доступ к функции из 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
Автор: Max Источник Размещён: 12.11.2019 10:02

Ответы (1)


1 плюс

Решение

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

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

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

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

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

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

Автор: David Zemens Размещён: 11.07.2016 12:31
Вопросы из категории :
32x32