“VBA返回”;运行时错误91:对象变量或未设置块变量;

“VBA返回”;运行时错误91:对象变量或未设置块变量;,vba,excel,Vba,Excel,好的,我试着用VBA制作一个复杂的地理编码脚本。我编写了以下代码,出于某种原因,它返回了一个错误(“运行时错误91:对象变量或未设置块变量”)。我使用的链接示例可以是:https://maps.googleapis.com/maps/api/geocode/xml?address=1+无限+环路、+Cupertino、+Santa+Clara、+California+95014和传感器=假” 有人能告诉我我做错了什么吗?为什么在/location/lat之前有空格,lng上的.Text而不是la

好的,我试着用VBA制作一个复杂的地理编码脚本。我编写了以下代码,出于某种原因,它返回了一个错误(“运行时错误91:对象变量或未设置块变量”)。我使用的链接示例可以是:https://maps.googleapis.com/maps/api/geocode/xml?address=1+无限+环路、+Cupertino、+Santa+Clara、+California+95014和传感器=假”


有人能告诉我我做错了什么吗?

为什么在/location/lat之前有空格,lng上的.Text而不是lat?

SelectSingleNode()
可能会返回
什么也不返回

如果函数的结果可能是
,则千万不要对该函数调用属性(如
.Text

执行以下操作以避免此错误:

ixmldemelement的尺寸位置
Dim locationPath作为字符串
locationPath=“GeocodeResponse/result/geometry[location\u type='rowtop']/location”
设置位置=odc。选择SingleNode(locationPath)
lat=GetTextValue(位置“./lat”)
lng=GetTextValue(位置“./lng”)
' ------------------------------------------------------------------------
函数GetTextValue(节点作为IXmlDomeElement,可选xpath作为String=”“)作为字符串
将所选节点设置为IXMLDOMELENT
如果xpath“”和Not节点为空,则
设置selectedNode=node.SelectSingleNode(xpath)
其他的
设置selectedNode=node
如果结束
如果selectedNode为Nothing,则
GetTextValue=“”
其他的
GetTextValue=Trim(selectedNode.Text)
如果结束
端函数

当我试图在不使用
设置的情况下为对象赋值时,这种情况总是发生在我身上。试试这个:

Set lat = odc.SelectSingleNode("GeocodeResponse/result/geometry[location_type='ROOFTOP']/location/lat").Text
Set lng = odc.SelectSingleNode("GeocodeResponse/result/geometry[location_type='ROOFTOP']/location/lng").Text

很抱歉,我在将代码复制到Firefox时犯了这些错误。好的,我建议找到引发此错误的行,以进一步探索未设置对象的原因。我注意到您没有在Dim和Set上指定MSXML2。如果您准确地说明了错误的位置,这将非常有用。很可能您的某个xpath没有生成任何选定的节点。相同的错误,但在“Set selectedNode=node.SelectSingleNode(“./”&xpath)”行中。此外,我在“If selectedNode Is Nothing”一行中得到了一个语法错误,但我添加了“Then”,我再也不会得到那个语法错误了。@MartinUKPL oops,有
然后
丢失了。我还移动了
/
。再试一次。同样的错误,但是现在在
lat=GetTextValue(位置“./lat”)
@MartinUKPL上不可能,尤其是在这一行上。我的代码可以工作,我已经测试过了。“问题一定是别的。”布拉德试图分配一个字符串。请参阅调用他使用的
.Text
。但你是对的,这是他麻烦的直接原因。我忽略了这一点,但我的观点是正确的。他使用函数结果时没有事先检查它是否为Null。节点的
.text
属性返回字符串,而不是对象。啊,错过了旧的“需要读取到行的末尾”选项。哎呀!谢谢你的来信。
Set lat = odc.SelectSingleNode("GeocodeResponse/result/geometry[location_type='ROOFTOP']/location/lat").Text
Set lng = odc.SelectSingleNode("GeocodeResponse/result/geometry[location_type='ROOFTOP']/location/lng").Text