Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
内存不足错误VBA-Excel_Excel_Vba_Memory - Fatal编程技术网

内存不足错误VBA-Excel

内存不足错误VBA-Excel,excel,vba,memory,Excel,Vba,Memory,下面的代码块出现内存不足错误。有没有人看到明显的原因 编辑代码以显示整个块。最终,这将在一个目录中循环,但在工作之前,我将只查看一个文件 Sub Get_BT_Data() Dim fNameAndPath, data As Variant Dim j, c, r As Integer fNameAndPath = Application.GetOpenFilename(FileFilter:="Excel Files (*.XLSM), *.XLSM", Title:="Select

下面的代码块出现内存不足错误。有没有人看到明显的原因

编辑代码以显示整个块。最终,这将在一个目录中循环,但在工作之前,我将只查看一个文件

Sub Get_BT_Data()
Dim fNameAndPath, data As Variant
Dim j, c, r As Integer

fNameAndPath = Application.GetOpenFilename(FileFilter:="Excel Files (*.XLSM), *.XLSM",     Title:="Select File To Be Opened")
If fNameAndPath = False Then Exit Sub

Workbooks.Open Filename:=fNameAndPath

Sheets("Summary For CDP").Activate
j = Range("A2").Value
c = Range("B2").Value
data = Range("DataRay")

ThisWorkbook.Activate

r = Cells(7, 4).End(xlDown).Row

For i = 7 To r
If Cells(i, 4).Value = j Then
    If Cells(i, 4).Offset(0, 1).Value = c Then
        Cells(i, 4).Offset(0, 3).Value = data(9, 20)
        Cells(i, 4).Offset(0, 4).Value = data(22, 22)
        Cells(i, 4).Offset(0, 7).Value = data(2, 20)
        Cells(i, 4).Offset(0, 8).Value = data(15, 22)
        Cells(i, 4).Offset(0, 10).Value = data(5, 20)
        Cells(i, 4).Offset(0, 11).Value = data(18, 22)
        Cells(i, 4).Offset(0, 13).Value = data(3, 22)
        Cells(i, 4).Offset(0, 14).Value = data(16, 22)
        Cells(i, 4).Offset(0, 16).Value = data(4, 20) + data(6, 20)
        Cells(i, 4).Offset(0, 17).Value = data(17, 22) + data(19, 22)
        Cells(i, 4).Offset(0, 19).Value = data(7, 20)
        Cells(i, 4).Offset(0, 20).Value = data(20, 22)
    Else
        If i = r Then
            Cells(7, 4).End(xlDown).Offset(-2, 0).EntireRow.Insert
        Else
        End If
    End If
Else
End If
Next i

End Sub

尝试检查
r
的值

r=单元格(7,4).结束(xlDown).行更改到下面可能会有所帮助

r = Cells(Rows.count, 4).End(xlUp).Row
这一行也一样

Cells(7, 4).End(xlDown).Offset(-2, 0).EntireRow.Insert
使用
XlDown
可能会很危险,因为如果列中有空格,则可能会错过值,或者如果第7行下面没有数据,则会返回工作表底部的行。我怀疑这种情况可能会发生

当您试图查找最后一行数据时,通常最好从工作表的底部开始

而且

您应该查看您的
“DataRay”
范围有多大,尝试将其替换为适当的范围而不是命名的范围

范围(“DataRay”)
更改为类似
范围(“A1:E500”)

如果要检查
DataRay
范围的大小,则可以在代码的开头使用以下内容进行调试

MsgBox Range("DataRay").Rows.Count & " Rows " & Range("DataRay").Columns.Count & " Columns"

r
的最大值是多少?我将r声明为一个整数,最大值可能永远不会超过400。我需要声明为long吗?我正在向variant数组传递一个范围,它是22列乘22行,我将用我代码的其余部分编辑我的原始问题。我尝试了,但没有成功。我用两种方法得到了r(260)的相同值。谢谢你关于从底部开始的提示。这很有道理。我一步一步地走到I=50,然后中断,这就是出错的时候。它在If i=r语句之前。@Clouse24您的代码中有另一行使用
XlDown
尝试更改该行。我没有看到您将
r
声明为整数,如果您超过了它的数据大小,那么您将得到
溢出
错误,所以不会是这样。说到这一点,
dimj,c,r作为整数
,在那句话中
j
c
被声明为
变量
。它应该是
Dim j作为整数,c作为整数,r作为整数
给了它一个机会,实际上必须声明两个同样长的变量,但它起了作用。非常感谢你的帮助!