运行时错误7使用vba集合的内存不足

时间:2016-03-09 22:17:54

标签: excel vba excel-vba

我是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导致内存不足错误。有人可以帮忙吗?

2 个答案:

答案 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。我可能会尝试使用它作为键,并将余数作为项目。