У меня есть программа, которая устанавливает некоторые глобальные массивы. Программа работала нормально, пока пару часов назад. Сегодня уже было несколько раз. Я ничего не изменил, кроме размера массива (от 99500 до 99900, 9), это проблема? Если это размер массива, есть ли способ хранить эти данные с другой структурой данных (коллекция, dict, определяемая пользователем)?
Const PartMaterialsFilePath = "C:\Users\jayferreira\Desktop\"
Const PartMaterialsFileName = "Part Materials.xlsm"
Function getPPNWorksheet() As Worksheet
If isWkbkOpen(PartMaterialsFileName) Then
Set getPPNWorksheet = Workbooks(PartMaterialsFileName).Worksheets(2)
Else
Set getPPNWorksheet = Workbooks.Open(PartMaterialsFilePath + PartMaterialsFileName).Worksheets(2)
End If
End Function
Global partDescriptions() As String
Global partRevisions() As String * 5
Global partRevisionDates() As String * 10
Global partWeights() As Single
Global partNumbers() As String * 6
Global PartMaterials As Dictionary
Global initialized As Boolean
Function setGlobals()
Application.ScreenUpdating = False
Load loadingBar
loadingBar.Show
Dim rng As Range
Dim dataArr() As Variant
Dim mGPPN As Worksheet
Dim multipleOf As Long
Dim counter As Integer
Dim lastRow As Long
Dim i As Long
loadingBar.Text.Caption = "Loading ppn.xlsx..."
Set mGPPN = MCGBookFunctions.getPPNWorksheet
lastRow = MCGBookFunctions.getLastRow(mGPPN, , 1, 1)
loadingBar.Text.Caption = "Loading Data..."
mGPPN.Activate
dataArr = mGPPN.Range("A2", "I" & lastRow) ''this is where the overflow error occurs
MCGBookFunctions.closePartMaterialsworkbook True ''closes mGPPN
Set mGPPN = Nothing
ReDim partDescriptions(lastRow)
ReDim partRevisions(lastRow)
ReDim partRevisionDates(lastRow)
ReDim partWeights(lastRow)
ReDim partNumbers(lastRow)
multipleOf = lastRow / 100
For i = 1 To UBound(dataArr, 1)
partNumbers(i) = dataArr(i, 1)
partDescriptions(i) = dataArr(i, 2)
partRevisions(i) = dataArr(i, 3)
partRevisionDates(i) = dataArr(i, 4)
partWeights(i) = dataArr(i, 5) * 1000
If i Mod multipleOf = 0 Then
counter = counter + 1
loadingBar.Caption = "Storing Data..."
loadingBar.Text.Caption = counter & "% Completed"
loadingBar.Bar.Width = counter * 2
DoEvents
End If
Next
loadingBar.Caption = "Getting part materials from database..."
Set PartMaterials = DataBase.GetMaterials()
initialized = True
Application.ScreenUpdating = True
Unload loadingBar
End Function
примечание: строка, которая выводит ошибку, составляет две строки до того, как массивы будут перенаправлены. 'dataArr = mGPPN.Range ("A2", "I" & lastRow) ", как это прокомментировано в коде.
примечание: я поигрался с размером диапазона и могу присвоить диапазон ("A2", "I7804") массиву, но не на ряд больше. Сегодня я присвоил массиву гораздо больший диапазон, вплоть до пары часов назад.