我是excel的新手,事实上这是我第一次参加。一路走来,我成功地完成了大部分工作并在网上找到了答案。然而,最新的问题我无法找到答案,解决我的问题。
这个函数,下载一个json字符串,通常是5 + mb大。并且此循环查找每个组件的开始和结束{}并将其添加到集合中。一切都很好,直到我到达1600 / 35k左右的条目并发生运行时错误。
有第二个错误,带有超出字符串的消息,但是将vbNullString分配给字符串会阻止这种情况发生
Dim cnt As Long
Dim json As String, idKey As String
Dim strStart As Long, strFinish As Long
cnt = 0
strStart = 1
strFinish = 0
On Error GoTo HandleIt
Do While strFinish <= Len(dataStr) - 5
json = vbNullString
strStart = InStr(strStart, dataStr, "{""Id"":", vbBinaryCompare)
strFinish = InStr(strStart, dataStr, "}", vbBinaryCompare) - 1
json = Mid$(dataStr, strStart, strFinish)
' Get the itemID for the key
'strStart = InStr(6, json, ",", vbBinaryCompare)
'idKey = Mid$(json, 7, strStart - 7)
TSMDataBulk.add json
strStart = strFinish
cnt = cnt + 1
Loop
tltd:一切运行正常,直到TSMDataBulk.add导致内存不足错误。有人可以帮忙吗?
答案 0 :(得分:2)
看起来你正在使用Mid$,好像参数是:Mid $(string,start,end)实际上,参数是:Mid $(string,start,length)
因此,如果strStart为5000且strFinish为5050,那么您将返回5000到10549之间的所有字符,而不是将这些字符从5000返回到5050.这可以很好地解释当您进一步进入字符串时出现内存不足错误
变化:
json = Mid$(dataStr, strStart, strFinish)
为:
json = Mid$(dataStr, strStart, (strFinish - strStart) + 1)
答案 1 :(得分:1)
TSMDataBulk 看起来像是Scripting.Dictionary对象。您正在添加密钥但没有项目。
TSMDataBulk.add key:=json, item:=json
'alternate no. 1
TSMDataBulk.add key:=json, item:=""
'alternate no. 2 (overwrite method)
TSMDataBulk.item(json) = ""
根据您的示例代码判断,第一个位置有一个会话ID。我可能会尝试使用它作为键,并将余数作为项目。