访问VBA中的用户定义函数时出现#Value错误

时间:2016-07-11 12:22:52

标签: excel 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 个答案:

答案 0 :(得分:1)

It's a documented limitation of User-Defined Functions无法通常操作或操作从工作表调用的UDF中的范围/工作表对象。虽然您可以执行大多数值/属性查询,但您无法更改环境:

  

工作表单元格中的公式调用的用户定义函数不能   更改Microsoft Excel的环境。这意味着这样的   功能不能执行以下任何操作:

     
      
  • 在电子表格中插入,删除或格式化单元格。
  •   
  • 更改另一个单元格的值。
  •   
  • 移动,重命名,删除或向工作簿添加工作表。
  •   
  • 更改任何环境选项,例如计算模式或屏幕视图。
  •   
  • 将名称添加到工作簿。设置属性或执行大多数方法。
  •   

我怀疑在VBE中使用F8键单步执行此代码会识别错误,可能是Worksheets("Sheet1").Cells(1,6).Value

此限制背后的基本原理是防止无限循环/循环引用。

There are ways to circumvent this limitation.