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