如何从Excel VBA返回的OLCArea结构体中提取单个字段值?
解决Excel中提取OLCDecode返回结构体单个属性的问题
Excel工作表公式无法直接引用VBA自定义Type的成员,你需要编写辅助函数来提取目标属性,以下是两种可行方案:
方案1:编写单个属性的专用提取函数
针对每个需要提取的属性创建独立函数,比如提取LatLo:
Function OLCDecodeLatLo(code As String) As Double Dim area As OLCArea area = OLCDecode(code) OLCDecodeLatLo = area.LatLo End Function
同理可复制此结构,创建OLCDecodeLngLo、OLCDecodeLatCenter等函数,只需修改返回的属性名即可。
使用示例:在单元格中输入=OLCDecodeLatLo(A1)(A1为存储Plus Code的单元格)。
方案2:编写通用属性提取函数
如果不想创建多个函数,可写一个通用函数,通过指定属性名返回对应值:
Function OLCDecodeProperty(code As String, propertyName As String) As Variant Dim area As OLCArea area = OLCDecode(code) Select Case LCase(propertyName) Case "latlo" OLCDecodeProperty = area.LatLo Case "lnglo" OLCDecodeProperty = area.LngLo Case "lathi" OLCDecodeProperty = area.LatHi Case "lnghi" OLCDecodeProperty = area.LngHi Case "latcenter" OLCDecodeProperty = area.LatCenter Case "lngcenter" OLCDecodeProperty = area.LngCenter Case "codelength" OLCDecodeProperty = area.CodeLength Case Else OLCDecodeProperty = CVErr(xlErrValue) ' 属性名错误时返回值错误 End Select End Function
使用示例:提取LngCenter时,输入=OLCDecodeProperty(A1, "LngCenter"),属性名不区分大小写。
注意事项
- 确保
OpenLocationCode.bas模块已正确导入Excel VBA项目,且OLCArea类型、OLCDecode函数均为Public修饰(原代码已默认设置)。 - 编写完辅助函数后,需将工作簿保存为
.xlsm或.xlsb格式,否则VBA代码会丢失。
内容的提问来源于stack exchange,提问作者Otxoto
相关产品推荐
相关产品推荐

