运行时错误“7”:从另一个工作簿复制带有前导文本 === 的数据时内存不足

问题描述 投票:0回答:3

我们在面向客户的数据库上运行报告。我们在各种其他报告中使用这些报告中的数据,所有这些都是通过 Excel 和宏完成的。

这些报告已经持续了大约两年,直到上周六我们开始得到:

运行时错误“7”:
从另一个工作簿复制数据时内存不足

一位客户在任何文本之前添加了三个等号 (===) 的条目,我的假设是 Excel 正在尝试求解方程而不是复制数据。

如果我将数据削减到仅该行,就会发生这种情况。

我想构建一些东西来解决这个问题。

调用的代码。

With ActiveWorkbook.Sheets(1).UsedRange
    RawDataMR.Range("A1").Resize(.Rows.Count, .Columns.Count) = .Value
End With

我尝试将计算设置为手动。
我尝试关闭该特定工作表的计算。

我希望有一种方法可以阻止它尝试将其读取为公式。

我唯一的另一个想法是建立一个例程,检查每个单元格的内容并删除字母数字字符以外的任何字符,但这似乎有问题,因为通常有 7k 行,而且我很确定它在遇到问题时仍然会打嗝那个细胞。

excel vba runtime-error
3个回答
1
投票

这是一个更有针对性的方法。 在

arr
上循环比在源范围内逐个单元格循环要快得多。

'example usage
Sub Tester()
    '...
    '...
    TransferClean ActiveWorkbook.sheets(1).UsedRange, RawDataMR.Range("A1")
    '...
End Sub


Sub TransferClean(rngSrc As Range, rngDest As Range)
    Dim arr, r As Long, c As Long, v
    arr = rngSrc.Value
    For r = 1 To UBound(arr, 1)
        For c = 1 To UBound(arr, 2)
            v = arr(r, c)
            'if it looks like a formula, make it Text
            If v Like "=*" Then arr(r, c) = "'" & v
        Next c
    Next r
    rngDest.Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
End Sub

0
投票
  1. 看起来问题正在发生,因为 Excel 正在尝试处理任何 以 === 开头的单元格作为公式,这导致了错误

  2. 您可以循环遍历单元格并检查它们是否以 = 开头(其中 包括 ===),然后在开头添加撇号 (') 以确保 Excel 将其视为纯文本而不是公式


0
投票

我正在寻找的修复比我希望的更简单。感谢 BigBen 的回复。

RawDataMR.Range("A1").Resize(.Rows.Count, .Columns.Count).NumberFormat = "@"

,在传输值之前。 – 大本钟

© www.soinside.com 2019 - 2024. All rights reserved.