如何用VBA读取JSON并提取性别值至Excel?代码遇类型不匹配报错
问题分析与修正方案
错误原因
原代码存在两个核心问题触发类型不匹配错误:
- JSON对象处理逻辑错误:你提取的
Array_need是单个JSON对象,解析后得到的Jsonobject是Dictionary类型。For Each Item In Jsonobject循环中,Item是对象的键名字符串(如"Name""Gender"),而非对象本身,此时执行Item("Gender")会因字符串无法作为字典调用而报错。 - 未正确利用原始JSON结构:手动拆分JSON字符串的方式既不严谨,也忽略了原始数据是嵌套数组的结构,应该直接解析完整JSON来定位目标数据。
修正后的代码
Option Explicit Sub GetGenderFromJson() Dim rawJson As String Dim jsonRoot As Object, outerItem As Object, innerItem As Object ' 获取单元格中的JSON字符串 rawJson = Worksheets("sheet1").Cells(1, 1).Value ' 解析完整JSON(需确保已引入JsonConverter模块) Set jsonRoot = JsonConverter.ParseJson(rawJson) ' 遍历外层数组 For Each outerItem In jsonRoot ' 遍历外层数组中的每个内层数组 For Each innerItem In outerItem ' 检查当前对象是否包含Gender键 If innerItem.Exists("Gender") Then Worksheets("sheet1").Cells(1, 2).Value = innerItem("Gender") Exit Sub ' 找到目标后直接退出,避免多余循环 End If Next innerItem Next outerItem End Sub
关键说明
- 完整解析JSON:直接解析原始嵌套数组结构,避免手动拆分字符串带来的错误和不稳定性。
- 逐层遍历嵌套结构:原始JSON是
数组→数组→对象的嵌套结构,通过两层循环逐层遍历,精准定位包含Gender键的对象。 - 优化运行效率:找到目标值后立即退出子程序,减少不必要的循环执行。
内容的提问来源于stack exchange,提问作者Yes_par_row
相关产品推荐
相关产品推荐

