#访问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 

这是用户定义的函数的一个logging的限制 ,您通常不能操作或操作工作表中调用的UDF中的范围/工作表对象。 尽pipe您可以执行大部分的价值/财产查询,但您无法更改环境:

由工作表单元格中的公式调用的用户定义的函数不能更改Microsoft Excel的环境。 这意味着这样的function不能做到以下任何一项:

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

我怀疑,在VBE中使用F8键逐句通过此代码将识别错误,可能Worksheets("Sheet1").Cells(1,6).Value

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

有办法绕过这个限制。