powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / вставка данных из Recordset на лист excel
6 сообщений из 6, страница 1 из 1
вставка данных из Recordset на лист excel
    #35611638
anyMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ни как не получается вставить данные из рекордсета на лист. Писала и так :
Код: plaintext
ThisWorkbook.Worksheets("1").Range("A1").CopyFromRecordset rs
и вот так:
Код: plaintext
1.
2.
3.
4.
Dim QT1 As QueryTable

Set QT1 = QueryTables.Add(rs, Range("A1"))

QT1.Refresh
никакой реакции, хотя рекордсет создан и заполнен нужными данными.
...
Рейтинг: 0 / 0
вставка данных из Recordset на лист excel
    #35613971
Ghola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рекордсет - не пустой? В окне иммедиэйт проверьте - распечатайте значения его полей.

Если ваш код вызывается из функции листа - то работать не будет. Эмпирически доказано - функция листа не может изменять значения произвольных ячеек. Ошибка 1004. В том числе этого не могут делать процедуры, вызванные из функции листа. Однако, если Вы посадите вызов той же процедуры на обработку события - например на клик по кнопке (которую вставите в лист) - то должно работать.
...
Рейтинг: 0 / 0
вставка данных из Recordset на лист excel
    #35614007
Ghola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, метод CopyFromRecordset сохатит форматы ячеек. Я решил им не пользоваться. Делаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
    'Отключаем автоматические вычисления, чтобы зависимые функции не пересчитывались
    'при выводе в каждую ячейку
    Application.Calculation = xlManual
    
    'Выводим названия полей в первую строку диапазона вывода
    iFieldsCount = oRst.Fields.Count
    For i =  1  To iFieldsCount
        oOutRange.Cells( 1 , i).Value2 = oRst.Fields(i -  1 ).Name
        'Debug.Print oRst.Fields(i - 1).Name, oRst.Fields(i - 1).Type
    Next
    
    oOutRange.Rows( 1 ).Interior.ColorIndex =  15  'серый
    
    'Вывод значений, начиная со второй строки диапазона вывода
    'oOutRange.Cells(2, 1).CopyFromRecordset oRst '(портится форматирование)
        
    i =  2  'Вывод значений, начиная со второй строки диапазона вывода
    Do Until oRst.EOF
        For j =  1  To iFieldsCount
            oOutRange.Cells(i, j) = oRst(j -  1 )
        Next j
        'oOutRange(i, 2) = oRst(1)
        oRst.MoveNext
        i = i +  1 
    Loop
...
Рейтинг: 0 / 0
вставка данных из Recordset на лист excel
    #35614132
anyMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GholaРекордсет - не пустой? В окне иммедиэйт проверьте - распечатайте значения его полей.

Если ваш код вызывается из функции листа - то работать не будет. Эмпирически доказано - функция листа не может изменять значения произвольных ячеек. Ошибка 1004. В том числе этого не могут делать процедуры, вызванные из функции листа. Однако, если Вы посадите вызов той же процедуры на обработку события - например на клик по кнопке (которую вставите в лист) - то должно работать.

Нет не пустой - проверяла. Заработало, и именно из листа, когда добавила вот это:
Код: plaintext
1.
2.
3.
4.
5.
6.
On Error GoTo CnErrorsHandler
CnErrorsHandler:
For Each ADOErr In cn.Errors
Debug.Print ADOErr.Number
Debug.Print ADOErr.Description
Next
сама не поняла почему:)
...
Рейтинг: 0 / 0
вставка данных из Recordset на лист excel
    #35614141
anyMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GholaКстати, метод CopyFromRecordset сохатит форматы ячеек. Я решил им не пользоваться. Делаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
    'Отключаем автоматические вычисления, чтобы зависимые функции не пересчитывались
    'при выводе в каждую ячейку
    Application.Calculation = xlManual
    
    'Выводим названия полей в первую строку диапазона вывода
    iFieldsCount = oRst.Fields.Count
    For i =  1  To iFieldsCount
        oOutRange.Cells( 1 , i).Value2 = oRst.Fields(i -  1 ).Name
        'Debug.Print oRst.Fields(i - 1).Name, oRst.Fields(i - 1).Type
    Next
    
    oOutRange.Rows( 1 ).Interior.ColorIndex =  15  'серый
    
    'Вывод значений, начиная со второй строки диапазона вывода
    'oOutRange.Cells(2, 1).CopyFromRecordset oRst '(портится форматирование)
        
    i =  2  'Вывод значений, начиная со второй строки диапазона вывода
    Do Until oRst.EOF
        For j =  1  To iFieldsCount
            oOutRange.Cells(i, j) = oRst(j -  1 )
        Next j
        'oOutRange(i, 2) = oRst(1)
        oRst.MoveNext
        i = i +  1 
    Loop


Спасибо, красиво получается :)
...
Рейтинг: 0 / 0
вставка данных из Recordset на лист excel
    #35623936
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно еще красивше :-)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    rst.MoveFirst
    Dim myArr() As Variant
    myArr = rst.GetRows()
    For j =  0  To UBound(myArr,  1 )
      For i =  0  To UBound(myArr,  2 )
        Cells(j,i).Value=myArr(j, i)
      Next
    Next
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / вставка данных из Recordset на лист excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]