Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / вставка данных из Recordset на лист excel / 6 сообщений из 6, страница 1 из 1
23.10.2008, 13:24
    #35611638
anyMag
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вставка данных из Recordset на лист excel
ни как не получается вставить данные из рекордсета на лист. Писала и так :
Код: 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
24.10.2008, 11:32
    #35613971
Ghola
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вставка данных из Recordset на лист excel
Рекордсет - не пустой? В окне иммедиэйт проверьте - распечатайте значения его полей.

Если ваш код вызывается из функции листа - то работать не будет. Эмпирически доказано - функция листа не может изменять значения произвольных ячеек. Ошибка 1004. В том числе этого не могут делать процедуры, вызванные из функции листа. Однако, если Вы посадите вызов той же процедуры на обработку события - например на клик по кнопке (которую вставите в лист) - то должно работать.
...
Рейтинг: 0 / 0
24.10.2008, 11:38
    #35614007
Ghola
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вставка данных из Recordset на лист excel
Кстати, метод 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
24.10.2008, 12:06
    #35614132
anyMag
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вставка данных из Recordset на лист excel
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
24.10.2008, 12:08
    #35614141
anyMag
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вставка данных из Recordset на лист excel
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
29.10.2008, 18:53
    #35623936
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вставка данных из Recordset на лист excel
Можно еще красивше :-)
Код: 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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / вставка данных из Recordset на лист excel / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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