Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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
Arrays 集合包含太多元素后出现VBA下标超出范围错误_Arrays_Excel_Vba_Collections - Fatal编程技术网

Arrays 集合包含太多元素后出现VBA下标超出范围错误

Arrays 集合包含太多元素后出现VBA下标超出范围错误,arrays,excel,vba,collections,Arrays,Excel,Vba,Collections,我真的很难在下面的代码中找到产生“下标超出范围”错误的原因。我试图用上述代码从当前日期后90天内具有时间戳的文本文件中读取数据。为了收集这些数据,我逐行读取每个文件,将数据存储到分割数组中,然后用分割数组的特定行填充两个集合。这段代码与我用来仅从特定作业集中检索数据的另一个应用程序配合使用效果良好。前面提到的应用程序中的代码似乎工作正常,直到我找到一个特定的文件,该文件在格式、内容或其他方面与以前成功读取的文件没有任何区别。在我看来,我已经达到了每个系列的尺寸限制,但我不确定。下面是我的代码:

我真的很难在下面的代码中找到产生“下标超出范围”错误的原因。我试图用上述代码从当前日期后90天内具有时间戳的文本文件中读取数据。为了收集这些数据,我逐行读取每个文件,将数据存储到分割数组中,然后用分割数组的特定行填充两个集合。这段代码与我用来仅从特定作业集中检索数据的另一个应用程序配合使用效果良好。前面提到的应用程序中的代码似乎工作正常,直到我找到一个特定的文件,该文件在格式、内容或其他方面与以前成功读取的文件没有任何区别。在我看来,我已经达到了每个系列的尺寸限制,但我不确定。下面是我的代码:

Private Sub Analyze_90Day_Data_Click()
    Application.ScreenUpdating = False
    Data_Selection_21075A.Hide
    'Declare Variables
    Dim FFFile As String
    Dim SplitData() As String
    Dim DateIter As Long
    Dim CurrentDate As Date
    Dim FileDate As Date
    Dim colSN As String
    Dim colSet As String
    Dim KPCDate As Date
    Dim CMMArray() As Variant
    'Remove old data from 21075A KPC
    LastRow = Sheets("21075A KPC").Range("G65536").End(xlUp).Row
    For SheetRow = 12 To LastRow
        Sheets("21075A KPC").Range("G" & SheetRow & ":H" & SheetRow).ClearContents
    Next SheetRow
    'Populate 21075A KPC with new data
    CurrentDate = Date
    KPCDate = DateAdd("d", -90, CurrentDate)
    CMMArray = Array("Inspcmm1", "Inspcmm2")
    For CMM = LBound(CMMArray) To UBound(CMMArray)
        With New Scripting.FileSystemObject
            CMMFolder = "\\" & CMMArray(CMM) & "\cmm\21075A\OP290"
            On Error GoTo ResumeIter
            Set CMMFold = .GetFolder(CMMFolder)
            For Each SetFolder In CMMFold.SubFolders
                FFFile = SetFolder & "\21075A-030-FINALFLOWTOT " &     SetFolder.Name & ".txt"
                MsgBox SetFolder.Name
                FileDate = FileDateTime(FFFile)
                If FileDate >= KPCDate Then
                    LineIter = 0
                    With .OpenTextFile(FFFile, ForReading)
                        Do Until .AtEndOfStream
                            LineIter = LineIter + 1
                            LineData = .ReadLine
                            SplitData = Split(LineData)
                            'Extracting Serial Number
                            strSN.Add SplitData(0)
                            'Extracting Final Flow Value
                            strFF.Add SplitData(2)
                        Loop
                        .Close
                    End With
                End If
            Next SetFolder
        End With
ResumeIter:
    Next CMM
    If strSN.Count = 0 Then
        MsgBox "Neither Brown & Sharpe is online."
        Exit Sub
    Else
        SheetRow = 12
        For SNIter = 1 To strSN.Count Step 1
            With Sheets("21075A KPC")
                .Range("G" & SheetRow).Value = strSN.Item(SNIter)
                .Range("H" & SheetRow).Value = strFF.Item(SNIter)
            End With
            SheetRow = SheetRow + 1
        Next SNIter
        LastRow = Sheets("21075A KPC").Range("G65536").End(xlUp).Row
        With Sheets("21075A KPC")
            'Calculate & Populate Means
            .Range("H5") = WorksheetFunction.Average(.Range("H12:H" & LastRow))
            'Calculate & Populate Standard Deviations
            .Range("H6") = WorksheetFunction.StDev(.Range("H12:H" & LastRow))
            'Populate 90-Day Reporting Period
            .Range("F3") = KPCDate
            .Range("F4") = CurrentDate
        End With
    End If
End Sub

上述过程中未声明的所有变量都已公开声明。谢谢你调查这件事。如果您需要我提供任何其他信息,请告诉我。

我发现SplitData数组没有清空,因此已达到其大小限制,导致下标超出范围错误。我在代码行“Do Until.AtEndOfStream”之后添加了代码行“Erase SplitData”,每次都会清空SplitData数组,以防止不必要的数据累积。

请注释或以其他方式披露产生错误的代码行。如果没有许多遗漏的内容,没有人能够真正运行您的代码,但是如果您告诉我们问题发生在哪里,我们可能有机会确定问题所在。可能是因为数组SplitData在第2位没有任何内容用于正在中断的行和文件。@Jeeped,发生错误的代码行是“strSN.Add SplitData0”。如果我注释掉这一行,错误会跳到下一行“strFF.Add SplitData2”。您好,请查看我在上面关于哪一行给出错误的注释。。我真的需要一些帮助来确定为什么在这么多文件之后,当我试图从中读取数据的文件本身没有任何问题时,代码停止工作。非常感谢。