Доброго времени суток. Программа выводит ошибку "Run-time error "9": Subscript out of range", но не могу понять почему. Помогите пожалуйста.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub Загрузка данных из файлов()
' папка, в которой будет производиться поиск файлов DAT для обработки
ПапкаДляФайлов$ = "E:\Data"Dim ErrorsArray ' пустой массив для ошибок' Считываем данные из всех файлов .DAT в папке в двумерный массив
DataArr = DATfolder2Array(ПапкаДляФайлов$, 4, "", ErrorsArray)
' результаты выводим на листы "errors" и "result" (они должны существовать)'Array2worksheet Worksheets("îøèáêè"), ErrorsArray, _ Array("Имя файла", "Номер строки, "Данные из строки")
Array2worksheet Worksheets("ðåçóëüòàò"), DataArr, _
Array("Столбец 1", "Столбец 2", "Столбец 3", "Столбец 4")
EndSub
Function CombineArrays(Arr1 AsVariant, Arr2 AsVariant) AsVariant'функция CombineArrays объединяет 2 двумерных массива ОДИНАКОВОЙ ШИРИНЫ в один массив'(второй массив "дописывается" ниже первого, путем добавления строк из второго массива в первый)'Функция возвращает массив той же ширины, что и исходные,'а вертикальная размерность возвращаемого массива равна сумме количества строк исходных массивов''В случае, если один из массивов не задан, функция возвращает другой заданный массив (без изменений)'ВНИМАНИЕ: все размерности массивов 1 и 2 должны совпадать (кроме первой размерности - по высоте)'Подразумевается, что индексы массивов начинаются с 1 (директива Option Base 1)' если один из параметров не является массивом, функция возвращает другой параметр (массив)If (Not IsArray(Arr1)) And IsArray(Arr2) Then CombineArrays = Arr2: ExitFunctionIf (Not IsArray(Arr2)) And IsArray(Arr1) Then CombineArrays = Arr1: ExitFunction' если оба параметра функции не являются массивамиIf (Not IsArray(Arr2)) And (Not IsArray(Arr1)) Then
Debug.Print"ОШИБКА: Оба переданных значения не являются массивами!"
CombineArrays = Null: ExitFunctionEndIf' проверяем совпадение размерностей массивов Arr1 и Arr2OnErrorResumeNext: Err.Clear
If (LBound(Arr1, 2) <> LBound(Arr2, 2)) Or (UBound(Arr1, 2) <> UBound(Arr2, 2)) Then
Debug.Print"ОШИБКА: Размерности массивов (по ширине) не совпадают"
CombineArrays = Null: ExitFunctionEndIfIf Err.Number = 9 Then
Debug.Print"ОШИБКА: Один из массивов не является двумерным!"
CombineArrays = Null: ExitFunctionEndIfReDim arr(1 ToUBound(Arr1, 1) + UBound(Arr2, 1), LBound(Arr1, 2) ToUBound(Arr1, 2))
For i = 1 ToUBound(Arr1, 1)
For j = LBound(Arr1, 2) ToUBound(Arr1, 2)
arr(i, j) = Arr1(i, j)
NextNextFor i = 1 ToUBound(Arr2, 1)
For j = LBound(Arr2, 2) ToUBound(Arr2, 2)
arr(i + UBound(Arr1, 1), j) = Arr2(i, j)
NextNext
CombineArrays = arr ' возвращаем объединённый массивEndFunction
Файлы перевел в .txt для того, чтобы выложить в тему. Они созданы для примера. Реальный массив, который нужно обработать, гораздо больше. Но хотелось бы для начала разобраться с этими файлами.
Sub Загрузка данных из файлов()
' папка, в которой будет производиться поиск файлов DAT для обработки
ПапкаДляФайлов$ = "E:\Data"Dim ErrorsArray ' пустой массив для ошибок' Считываем данные из всех файлов .DAT в папке в двумерный массив
DataArr = DATfolder2Array(ПапкаДляФайлов$, 4, "", ErrorsArray)
' результаты выводим на листы "errors" и "result" (они должны существовать)'Array2worksheet Worksheets("ошибки"), ErrorsArray, _ Array("Имя файла", "Номер строки, "Данные из строки")
Array2worksheet Worksheets("результат"), DataArr, _
Array("Столбец 1", "Столбец 2", "Столбец 3", "Столбец 4")
EndSub
[/BASIC]
Подсвечивает строку:
[BASIC]Array2worksheet Worksheets("результат"), DataArr, _
Array("Столбец 1", "Столбец 2", "Столбец 3", "Столбец 4")
Нет, это еще не скомпилированная программа.
Комментарий модератора
В этом разделе код должен быть заключен в тег "VB"