代码之家  ›  专栏  ›  技术社区  ›  Mastertwig8d

如何修复运行时错误7 Excel宏内存不足

  •  0
  • Mastertwig8d  · 技术社区  · 1 年前

    我正在使用一个宏,它将3个不同excel文件中的数据编译成一个文件。 它一直运行良好,直到今天它声明标记运行时错误7内存不足。它挂在132号线上。

    不幸的是,我没有创建这个宏,而且最重要的是我对宏非常不熟悉。 我已经对错误代码进行了一些研究,我的虚拟内存被设置为推荐,除了这个宏,我的计算机上没有其他东西运行。所以在我的研究中唯一出现的另一件事是“LOOP”

    在它给出错误的地方有一个循环,但我已经尝试了建议的修复方法,但似乎不起作用。

    如果可能的话,我想知道如何通过对VBA代码进行一些小的编辑来解决这个问题,否则我不得不跳过这一行,这会给我留下一个不完整的最终文件,我现在必须引用我开始使用的原始3。下面是代码,粗体部分是它给出内存不足错误的行。

    Dim i As Long
    Dim lastRow As Long
    
        With SnapDataTool.Sheets("Transcripts")
            .Activate
            lastRow = .Cells(rows.Count, 1).End(xlUp).Row
            .Columns("A:E").Sort key1:=Range("A1"), order1:=xlAscending, Header:=xlYes
            
            For i = 2 To lastRow
                    
                    DoEvents
                    SimpleStatus.updateTB.Caption = "Cleaning up the chat and email transcripts..." & vbCrLf & "Current Line: " & i
                    DoEvents
                    
                    Do While .Cells(i, 1) = .Cells(i + 1, 1)
                        If .Cells(i, 1) = "" Then
                            Exit Do
                        End If
                            
                        **.Cells(i, 4) = .Cells(i, 4) & .Cells(i + 1, 4)**
                        .rows(i + 1).EntireRow.Delete
                        lastRow = lastRow - 1
                        
                    Loop
            Next i
            
            DoEvents
            SimpleStatus.updateTB.Caption = "Finishing up transcript concatenation..."
            DoEvents
            
            .Columns(2).EntireColumn.Delete
            .Columns(4).EntireColumn.Delete
            .Columns(3).WrapText = False
            
            DoEvents
            SimpleStatus.updateTB.Caption = "Concatenation complete..."
            SimpleStatus.Show vbModeless
            DoEvents
            
        End With
    
    End Sub
    
    0 回复  |  直到 1 年前
        1
  •  0
  •   mits    1 年前

    我不确定这是否能解决问题,但你可以试试这个。
    省略 For 循环及其内部的所有内容。将其替换为:

    Range("A2") = WorksheetFunction.Concat(Range("A2:A" & lastRow))
    Range("A3:A" & lastRow).EntireRow.Delete
    

    据我所知,这也会产生同样的结果。 我建议你测试一下 副本 但不是原件。