Страницы: 1
RSS
BOF или Eof имеет значение True
 
Здравствуйте

В VBA при помощи хранимой процедуры SQL получаю данные, обрабатываю их по определенному алгоритму, складываю в массив. Далее пытаюсь массив вывести в диапазон ячеек. Данные выводятся, но каждый раз вылетает ошибка:

---------------------------
Microsoft Excel
---------------------------
Ошибка работы программы. Ошибка:BOF или EOF имеет значение True, либо текущая запись удалена. Для выполняемой операции требуется текущая запись.
---------------------------
ОК  
---------------------------

Я почти уверен, что что-то не так с диапазоном, но что - не могу понять.

Массив объявлен так:
Dim resultArray(30, 16) As Variant - может быть только 16 столбцов, строк не более 30. Не всегда все строки заполнены, равно как и не все столбцы.

Вывожу на лист так:

Worksheets(7).Range("A3:P32").Value = Application.WorksheetFunction.Transpose(resultArray)

Может кто подсказать где я туплю?
 
Transpose не нужен.
Или Range("A3:AD18")
Изменено: МатросНаЗебре - 08.04.2021 15:59:19
 
попробуйте просто так
Код
Worksheets(7).Range("A3:P32").Value = resultArray


P.S. Вы в курсе, что у вас начальный индекс начинается с 0 при объявлении  Dim resultArray(30, 16) As Variant  ?
А в Excel нет нулевого столбца и нулевой строки.
Лучше объявлять вот так
Код
Dim resultArray(1 To 30, 1 To 16) As Variant

а выгружать на лист вот так
Код
Worksheets(7).Range("A3").Resize(UBound(resultArray, 1), UBound(resultArray, 2)).Value = resultArray
 
Transpose мне нужен, чтобы данные не в строку выводились, а в столбец.

Цитата
New написал:
P.S. Вы в курсе, что у вас начальный индекс начинается с 0 при объявлении  Dim resultArray(30, 16) As Variant  ?
А чем это не хорошо? Не очень понимаю

Цитата
New написал:
Лучше объявлять вот такКод ? 1Dim resultArray(1 To 30, 1 To 16) As Variantа выгружать на лист вот так
Все равно сначала ошибка, потом данные выводит.
 
Цитата
Sergey R написал:
А чем это не хорошо? Не очень понимаю
тем, что в Excel нет нулевого столбца и нулевой строки
а у меня ошибки нет

Код
Sub test()
    Dim resultArray(1 To 30, 1 To 16) As Variant
    Dim iRow As Long, iCol As Long
    
    For iRow = 1 To UBound(resultArray) 'по строкам
        For iCol = 1 To UBound(resultArray, 2) 'по столбцам
            resultArray(iRow, iCol) = iRow & "," & iCol 'заполняем массив какими-то данными
        Next iCol
    Next iRow
    Worksheets(1).Range("A3").Resize(UBound(resultArray, 1), UBound(resultArray, 2)).Value = resultArray
End Sub
Изменено: New - 08.04.2021 16:37:00
 
Цитата
New написал:
тем, что в Excel нет нулевого столбца и нулевой строкиа у меня ошибки нет
Да, действительно рабочий вариант. Вчера под конец дня голова уже не соображала совсем и не додумался остальные части кода проверить, в них и закралась ошибка.

Спасибо за решение проблемы!
Страницы: 1
Наверх