提问人:olli8 提问时间:11/7/2023 最后编辑:olli8 更新时间:11/8/2023 访问量:85
将数组写入表 (ListObject) - 内存不足
Write an array into table (ListObject) - out of memory
问:
我在格式化为 ListObject 的表中输入数组时遇到问题。 我使用了以下代码,但这并不适用于所有情况。
有问题的函数嵌入在主 Sub 中,如下所示。
Dim SFH As New SheetFilterhandler
Set SFH.SetTable = loSourceList
SFH.SaveFilters
SFH.DisableFilters
Call UpdateListObject(loSourceList, loImportList)
SFH.EnableFilters
功能可以简化为:
Public Function UpdateListObject(loTarget As ListObject, loSource As ListObject) As Boolean
On Error GoTo CreateErr
Dim PreviousContent As Variant
Dim Export As Variant
Export = loSource.DataBodyRange.value
PreviousContent = loTarget.DataBodyRange.value
Dim CurrentContent As Variant
ReDim CurrentContent(UBound(PreviousContent) + UBound(Export), UBound(PreviousContent, 2))
For ExportIndex = 1 To UBound(Export)
For PreviousContentIndex = 1 To UBound(PreviousContent)
'Export and PreviousContent is compared and written into CurrentContent
Next PreviousContentIndex
'new items
If ItemNotExisting Then
NewContentCounter = NewContentCounter + 1
loTarget.ListRows.Add
For i = 1 To UBound(Export, 2)
CurrentContent(UBound(PreviousContent) + NewContentCounter, i) = Export(ExportIndex, i)
Next i
End If
Next ExportIndex
loTarget.DataBodyRange.Value2 = CurrentContent 'problematic line
UpdateListObject = True
Exit Function
CreateErr:
UpdateListObject = False
GetErrMsg = Err.Description
Debug.Print "UpdateListObject: " & GetErrMsg
Debug.Print PreviousContentIndex & "," & ExportIndex
End Function
此代码适用于:
CurrentContent 变体/变体(1 至 1294、1 至 55); loTarget.DataBodyRange.Value2(1 到 647,1 到 55)
但对于以下情况,它不起作用:
CurrentContent 变体/变体(1 到 3071,1 到 20); loTarget.DataBodyRange.Value2(1 到 1543, 1 到 20)
大小不同,因为 ArrayName 只有大于最大行数的行的空条目,可以忽略。ListObject
在本例中,我使用 Debug.Print 来显示错误说明。
GetErrMsg = Err.Description
Debug.Print GetErrMsg
输出是可以翻译的。
如果有任何限制,我不明白,因为。
1294 x 55 = 71170 和 3071 x 20 = 61420Nicht genügend Speicher
not enough memory
在没有桌子的情况下也看到了相同的行为。
With ActiveSheet
.ListObjects(1).Unlist
.UsedRange.Offset(1, 0).Clear
.Range(.Cells(2, 1), Cells(UBound(CurrentContent) + 1, UBound(CurrentContent, 2))) = CurrentContent
End With
CurrentContent 示例数据
表达 | 价值 | 类型 |
---|---|---|
当前内容 (1,1) | 3709745 | 变体/双 |
当前内容 (1,2) | “字符串 1” | 变体/字符串 |
当前内容 (1,3) | #11.11.2023 11:11:11# | 变体/日期 |
当前内容 (1,4) | #11.11.2023# | 变体/日期 |
当前内容 (1,5) | “字符串 2 [1234567]” | 变体/字符串 |
当前内容 (1,6) | “字符串 3” | 变体/字符串 |
当前内容 (1,7) | “字符串 4” | 变体/字符串 |
当前内容 (1,8) | “字符串 5” | 变体/字符串 |
当前内容 (1,9) | “字符串 6” | 变体/字符串 |
当前内容 (1,10) | “字符串 7” | 变体/字符串 |
当前内容 (1,11) | "" | 变体/字符串 |
当前内容 (1,12) | “XX” | 变体/字符串 |
当前内容 (1,13) | "" | 变体/字符串 |
当前内容 (1,14) | "" | 变体/字符串 |
当前内容 (1,15) | "1234567, 1234567" | 变体/字符串 |
当前内容 (1,16) | “字符串 8” | 变体/字符串 |
当前内容 (1,17) | “字符串 9” | 变体/字符串 |
当前内容 (1,18) | #11.11.2023 11:11:11# | 变体/字符串 |
当前内容 (1,19) | “马克斯·穆斯特曼 (1234567)” | 变体/字符串 |
当前内容 (1,20) | 空 | 变体/空 |
答:
0赞
olli8
11/8/2023
#1
我有一列,其中所有单元格都有一个大字符串。删除此列后,不再有问题。
我想数组中可以写入的字符是有限制的。目前我不知道这个限制。Range
评论
ReDim CurrentContent(UBound(PreviousContent) + UBound(Export), UBound(PreviousContent, 2))
PreviousContent = loTarget.DataBodyRange.value